Django中的动态模板“包含”
我正在搭建一个Django网站,我的侧边栏可以根据不同的用户显示不同的内容。所以我主要的侧边栏模板里为每个要包含的插件准备了一个
,而每个插件的具体HTML内容则放在它们各自的模板文件里。
举个例子:
<div id="plugins">
<div id="plugin1">
{% include 'plugin1.html' %}
</div>
<div id="plugin2">
{% include 'plugin2.html' %}
</div>
</div>
现在我想动态生成这个列表,我该怎么做呢?因为模板只会被解析一次,所以我不能在上下文中发送一个'{% include 'plugin1.html'}'的字符串。
有什么想法吗?
2 个回答
0
你可以在视图中生成一个变量,这个变量可以包含你的模板,或者你也可以使用一个模板标签,根据另一个变量(比如一个阶段)来生成模板的路径。你可以注册下面这个标签,并根据自己的需求进行定制:
@register.filter
def get_template_phase(template_string, phase):
template_string = template_string.replace('<', '{').replace('>', '}')
return template_string.format(phase=phase)
把上面的代码放到你的templatetags文件夹里并注册它。
使用方法:
{% include 'includes/home__<phase>.html'|get_template_phase:'nomination' %}
15
你可以在 include
标签里面使用一个变量:
{% include my_user_html %}