有没有办法可以在Django中的同一个模板中渲染多个视图?如果有最佳实践可以做到这一点?提前致谢

问题描述 投票:0回答:2

我正在django开始一个数据分析项目,并希望在单个模板中显示由不同视图生成的文本数据和图形数据。这样做是一种好习惯,还是应该为文本数据和图形数据运行两个不同的模板?

django templates view
2个回答
0
投票

这是可能的。视图负责根据请求创建响应并返回它,并且可以使用任何有意义的方法来执行此操作。模板是这样做的一种工具,没有什么能阻止您在多个视图中使用给定模板。如果您正在使用功能视图,它可能看起来像这样:

def display_text(request):
    context = ...
    return render(request, "data.html", context)

def display_graph(request):
    context = ... # some different context than the text case
    return render(request, "data.html", context)

细节可能会有所不同 - 重点在于没有任何东西可以将模板绑定到一个视图。

这是否是一个好主意取决于您的两种情况之间共享多少模板行为。一般而言,我建议将模板的共享部分分解为父模板,并使用template inheritance专门针对不同数据类型的特定行为,而不重复共享部分。即使当前的显示行为相同,使用两个不同的模板也可以在将来更容易地进行更改。

如果单个模板可以真正处理这两种情况而无需确定数据类型是什么,并且您预计不会更改它,那么在两个视图中重用单个模板而不是创建特定于类型的模板可能是合理的选择。


0
投票

您可以使用一个基本模板,然后在该模板的块中显示数据

base_data.html

  some html
{% block data %}
{% endblock %}
   more html

text_data.html

{% extends 'base_data.html' %}

{% block data %}
   html to display the text data
{% endblock %}

graph_data.html

{% extends 'base_data.html' %}

{% block data %}
 html to display the graph data
{% endblock %}

views.py

def display_text_data(request):
    # your code
    return render(request, 'text_data.html', context)

def display_grapth_data(request):
    # your code
    return render(request, 'graph_data.html', context)

我不确切地知道你是否想要上面的内容,或者如果你想在一个html显示中显示两个,文本和图形,它是第二个:

data.html

display text_data using textdata context

display graph data using graphdata context

views.py

def show_data(request):
    textdata = # get text data context
    graphdata = # get graph data context
    return render(request, 'data.html', context={'textdata': textdata, 'graphdata': graphdata}
© www.soinside.com 2019 - 2024. All rights reserved.