我正在构建一个项目,在我的views.py中有几个视图,希望以仪表板格式合并(四个视图并排)。它们之所以足够复杂,是因为每个视图都包含许多变量并且具有很多逻辑服务器端,我也打算单独在其他地方使用它们。
我要问的是如果要创建仪表板视图(即,我有一个带有标题的基本模板),是将views.py中的单独视图合并到单个视图中的最佳方法是什么 / footer,然后在该基础中嵌入4个视图。
我的概念证明是使用正确的变量调用视图并解码呈现的返回值,然后将其作为变量传递到模板上,最后将其作为安全代码插入。见下文。我的直觉告诉我这是一种糟糕的做法,但是我不确定include / extends系统是否适合这种用途。
views.py
def view1(request, r1_level, r2_level, d_level, call_code):
...
return render(request,
'modules/logic/levels/' + call_code + '.html',
{
'indicators': indicators,
'd_level': d_level,
'prof': prof,
'a_flag': a_flag
}
)
def dashboard(request, level_code):
view1 = view1(request, r1_level, r2_level, d_level, call_code).content.decode("utf-8")
...
return render(request,
'dashboard.html',
{
'view1': view1,
...
}
)
dashboard.html
<div id="site-wrapper" class="content">
<div class='grid-container'>
<div class="grid-x grid-margin-x">
<div class="cell small-12 medium-6 large-8">
...
</div>
<div class="cell small-12 medium-6 large-4">
{{ view1 | safe }}
</div>
</div>
</div>
</div>
感谢您阅读这份烂摊子!
答案 0 :(得分:0)
您可以尝试做些什么,但是您需要做一些变通的工作。
views.py
def build_view1_data(): # not a view, just a helper function
dict = {}
... build logic here ...
return dict
def dashboard_view(request):
context_dict = {
'view1': build_view1(),
.... etc.
}
return render(request, 'template.html', context_dict)
然后,您可以使用{{view1.somedata}}访问模板中的所有view1数据。此外,当您要实际构建view1时,可以执行与上述相同的操作,并调用build_view1_data函数。
您还可以构建模板,以便可以在仪表板模板和view1模板中添加类似的内容。
dashboard.html
{% include 'view1.html' %}
那样,您只需要编写一次。