我想为我的基本模板提供一些额外的模板,就像下面的代码一样:
视图:
def my_view(request):
extra_templates=[
{'path': 'dashboard/timewindow.html'},
{'path': 'dashboard/search_box.html'},
]
context = {'extras': extra_templates}
return render(request, 'dashboard/base.html', context)
base.html文件
{% for extra_template in extras %}
{% include extra_template.path %}
{% endfor %}
我认为这可能会更强大,如果我还可以提供一些关键字参数并在渲染额外模板时将它们用作上下文,但我无法做到,下面的代码没有'工作:
视图:
def my_view(request):
extra_templates=[
{'path': 'dashboard/timewindow.html', 'context': {'var': 23}},
{'path': 'dashboard/search_box.html'},
]
context = {'extras': extra_templates}
return render(request, 'dashboard/base.html', context)
base.html文件
{% for extra_template in extras %}
{% include extra_template.path with extra_template.context %}
{% endfor %}
如果我可以在django模板中使用**
运算符之类的东西,那将允许一些非常棒的代码重用。
答案 0 :(得分:1)
首先,您不能在include
标记中使用双星号。 include
代码的with
参数只能理解foo=1
或1 as foo
符号。
所以,你有三个选择:
1)包含的模板将包含顶级模板中的所有变量。主要信息:timewindow.html
和search_box.html
不能包含具有不同值的相同变量。
def my_view(request):
extra_templates=[
{'path': 'dashboard/timewindow.html'},
{'path': 'dashboard/search_box.html'},
]
context = {'extras': extra_templates, 'var': 23}
return render(request, 'dashboard/base.html', context)
2)使用前缀
{# parent template #}
{% for extra_template in extras %}
{% include extra_template.path with extra=extra_template.context %}
{% endfor %}
{# included template #}
{{ extra.var }}
3)编写自定义模板标记并自行扩展上下文