Net*_*zen 101 python django django-templates
我想在2个不同的基本文件中提供相同的内容.
所以我试着这样做:
page1.html:
{% extends "base1.html" %}
{% include "commondata.html" %}
Run Code Online (Sandbox Code Playgroud)
page2.html:
{% extends "base2.html" %}
{% include "commondata.html" %}
Run Code Online (Sandbox Code Playgroud)
问题是我似乎无法同时使用extends和include.有办法做到这一点吗?如果没有,我怎样才能实现上述目标?
commondata.html覆盖base1.html和base2.html中指定的块
这样做的目的是以pdf和html格式提供相同的页面,其格式略有不同.上面的问题虽然简化了我想要做的事情,但如果我能得到答案,它将解决我的问题.
Mat*_*ell 103
当您使用extends template标签时,您说当前模板扩展另一个 - 它是一个子模板,依赖于父模板.Django将查看您的子模板并使用其内容填充父级.
您想要在子模板中使用的所有内容都应该在块中,Django用它来填充父级.如果你想在那个子模板中使用include语句,你必须把它放在一个块中,让Django理解它.否则它只是没有意义,Django不知道如何处理它.
Django文档有一些非常好的例子,可以使用块来替换父模板中的块.
https://docs.djangoproject.com/en/dev/ref/templates/language/#template-inheritance
pod*_*mok 75
来自Django文档:
include标记应该被视为"渲染此子模板并包含HTML"的实现,而不是"解析此子模板并将其内容包含在内,就好像它是父类的一部分".这意味着包含的模板之间没有共享状态 - 每个包含都是完全独立的渲染过程.
因此Django不会从你的commondata.html中获取任何块,并且它不知道如何处理渲染的html外部块.
小智 21
这应该可以解决这个问题:在块部分中放入include标签.
page1.html:
{% extends "base1.html" %}
{% block foo %}
{% include "commondata.html" %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
page2.html:
{% extends "base2.html" %}
{% block bar %}
{% include "commondata.html" %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
Net*_*zen 12
有关它为什么不适合我的更多信息,以防万一它可以帮助未来的人:
它不起作用的原因是django中的{%include%}不喜欢花式撇号这样的特殊字符.我试图包含的模板数据是从word中粘贴的.我不得不手动删除所有这些特殊字符,然后成功包含它.
归档时间: |
|
查看次数: |
139731 次 |
最近记录: |