在django模板中使用双星号运算符

时间:2015-12-29 08:12:17

标签: python django

我想为我的基本模板提供一些额外的模板,就像下面的代码一样:

视图

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模板中使用**运算符之类的东西,那将允许一些非常棒的代码重用。

1 个答案:

答案 0 :(得分:1)

首先,您不能在include标记中使用双星号。 include代码的with参数只能理解foo=11 as foo符号。

所以,你有三个选择:

1)包含的模板将包含顶级模板中的所有变量。主要信息:timewindow.htmlsearch_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)编写自定义模板标记并自行扩展上下文