Python 将{%block%}嵌套在{%for%}Django模板继承中
我正在使用Django开发一个字典应用程序。该应用程序的一个主要主题是显示定义的提要 具体而言,我有:Python 将{%block%}嵌套在{%for%}Django模板继承中,python,django,django-templates,feed,template-inheritance,Python,Django,Django Templates,Feed,Template Inheritance,我正在使用Django开发一个字典应用程序。该应用程序的一个主要主题是显示定义的提要 具体而言,我有: 列出新定义的“索引”提要 “标题词”提要,其中列出了特定标题词的定义 和“标记”提要,其中列出了使用特定标记标记的定义 index.html: {% block body %} <h1>Definitions</h1> <ul> {% for definition in definitions %} /
{% block body %}
<h1>Definitions</h1>
<ul>
{% for definition in definitions %}
// definition HTML
{% endfor %}
</ul>
{% endblock %}
{% block body %}
<h1>{{ headword }}</h1>
<ul>
{% for definition in headword.definitions_headword.all %}
// definition HTML
{% endfor %}
</ul>
{% block body %}
<h1>{{ tag }}</h1>
<ul>
{% for definition in tag.definitions_tag.all %}
// definition HTML
{% endfor %}
</ul>
{%block body%}
定义
{%用于定义中的定义%}
//定义HTML
{%endfor%}
{%endblock%}
headword.html:
{% block body %}
<h1>Definitions</h1>
<ul>
{% for definition in definitions %}
// definition HTML
{% endfor %}
</ul>
{% endblock %}
{% block body %}
<h1>{{ headword }}</h1>
<ul>
{% for definition in headword.definitions_headword.all %}
// definition HTML
{% endfor %}
</ul>
{% block body %}
<h1>{{ tag }}</h1>
<ul>
{% for definition in tag.definitions_tag.all %}
// definition HTML
{% endfor %}
</ul>
{%block body%}
{{headword}}
{%用于headword.definitions\u headword.all%}
//定义HTML
{%endfor%}
tag.html:
{% block body %}
<h1>Definitions</h1>
<ul>
{% for definition in definitions %}
// definition HTML
{% endfor %}
</ul>
{% endblock %}
{% block body %}
<h1>{{ headword }}</h1>
<ul>
{% for definition in headword.definitions_headword.all %}
// definition HTML
{% endfor %}
</ul>
{% block body %}
<h1>{{ tag }}</h1>
<ul>
{% for definition in tag.definitions_tag.all %}
// definition HTML
{% endfor %}
</ul>
{%block body%}
{{tag}}
{tag.definitions_tag.all%}
//定义HTML
{%endfor%}
显然,我需要一个basefeed.html模板,这三个文件可以共享。对于h1
标签,没有问题。但是,我在for循环可重用变量方面遇到了问题
我尝试将{%block iterable%}{%endblock%}
嵌套在feed.html的for循环中,就像{%block iterable%}{%endblock%}%}
中的{%fordefinition%}{%endblock%}%}一样,然后将定义、headword definitions\u headword.all和tag.definitions\u tag.all插入{%block iterable%}
中,但Django似乎并不支持这一点
我可能会向所有三个模板传递一个“definitions”上下文变量,并在所有三个for循环中使用它作为iterable,但是有没有一种方法可以不涉及Python代码的情况下实现呢?最后,您的解释对我来说有点模糊,但仅仅是基于您的第一句话“显然,我需要一个base feed.html模板,这三个文件可以共享。”
我想{%include%}可能就是你要找的
创建包含通用变量的“feed.html”基本模板。下面的通用变量是“header\u name”和“definitions”
{{header\u name}
{%用于定义中的定义%}
//定义HTML
{%endfor%}
在父模板(索引、标题词、标记)中,使用“包含”标记。将父模板变量传递到子模板中。示例如下:
headword.html
{%block body%}
{%include'pathname/feed.html',标题为\u name=headword definitions=headword.definitions\u headword.all%}
{%endblock%}
tag.html
{%block body%}
{%include'pathname/feed.html',标题为\u name=tag definitions=tag.definitions\u tag.all%}
{%endblock%}
谢谢你,伙计。这可能是我一直在寻找的。但是,现在我有了一个双导航栏。事实上feed.html扩展了base.html(导航栏就在这里)问题?如果是这种情况,我如何避免代码重复?请在扩展上更正。当包含子模板时,该子模板不需要继承/扩展基。您可以将“包含”视为几乎相反的“扩展”“。谢谢,但是如何避免重复base.html代码呢?现在我的feed.html扩展了base.html,然后,正如您所指出的,index、headword和tag.html包括feed.html。这将导致双导航栏。我将如何更改它,以便不必重复代码?