Django:由模板组成的模板

2 投票
2 回答
1546 浏览
提问于 2025-04-15 20:51

在我的一个Django模板中,有一段HTML代码在页面的多个地方重复出现。我想知道有没有办法把这段代码放到另一个模板里,然后在需要的地方“调用”这个模板呢?

2 个回答

0

我之前也遇到过同样的问题,这里分享一下我的经验。

这个问题的文档说明似乎不太清楚,但其实解决办法很简单——在你的主模板里插入HTML块,然后把其他模板的渲染结果放到这里面。

举个例子:

在主模板(app/main.html)中:

<!-- ... -->

{% autoescape on %}
  {{html}}
{% autoescape off %}

<!-- ... -->

在视图代码中:

from django.template.loader import get_template

def my_view(request, ...):
  # Do stuff...
  context = {'data': 'data'}
  t = get_template('app/partial_template.html')
  html = t.render(context=context)

  return render(request, 'app/main.html', context={'html': html, 'rest_data': 123})

这样,你就可以在一个模板里渲染另一个模板,而且两者之间的关系非常清晰(父模板对子模板的内容一无所知,也不知道子模板的具体情况)。

4

你需要了解一下模板继承的内容。

或者你也可以使用模板组合

一般来说,使用继承的方式会更好一些。

撰写回答