Django中的动态模板“包含”

7 投票
2 回答
4160 浏览
提问于 2025-04-16 12:12

我正在搭建一个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 %}

撰写回答