Django模板:包含和扩展?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (36)

我想在两个不同的基础文件中提供相同的内容。

所以我试图这样做:

page1.html:

{% extends "base1.html" %}
{% include "commondata.html" %}

page2.html:

{% extends "base2.html" %} 
{% include "commondata.html" %}

问题是,我似乎无法使用扩展和包含。有没有办法做到这一点?如果不是,我怎么能完成上述?

commondata.html覆盖了base1.html和base2.html中指定的块

这样做的目的是提供pdf和html格式的相同页面,格式稍有不同。上面的问题虽然简化了我想要做的事情,但如果我能得到答案,它将解决我的问题。

使用谷歌翻译结果

提问于
用户回答回答于

当你使用扩展模板标记时,你说当前模板扩展了另一个模板 - 它是一个子模板,具体取决于父模板。Django会查看你的子模板并使用其内容来填充父级。

你希望在子模板中使用的所有内容都应该在Django用来填充父项的块内。如果你想在子模板中使用include语句,你必须把它放在一个块中,以便Django理解它。否则,它只是没有意义,Django不知道如何处理它。

Django文档有几个非常好的使用块代替父模板中块的例子。

https://docs.djangoproject.com/en/dev/ref/templates/language/#template-inheritance

用户回答回答于

Django文档:

include标签应该被认为是“渲染这个子模板并包含HTML”的实现,而不是“解析这个子模板并且包含它的内容,就像它是父代的一部分一样”。这意味着包含模板之间不存在共享状态 - 每个包含都是完全独立的呈现过程。

因此,Django不会从你的commondata.html中获取任何块,并且它不知道如何处理块外部的HTML。

扫码关注云+社区

领取腾讯云代金券