Python 将{%block%}嵌套在{%for%}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 %} /

我正在使用Django开发一个字典应用程序。该应用程序的一个主要主题是显示定义的提要

具体而言,我有:

  • 列出新定义的“索引”提要
  • “标题词”提要,其中列出了特定标题词的定义
  • 和“标记”提要,其中列出了使用特定标记标记的定义
  • index.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%}
    定义
    
      {%用于定义中的定义%} //定义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。这将导致双导航栏。我将如何更改它,以便不必重复代码?