【问题标题】:Django overwrite parts in inherited templatesDjango 覆盖继承模板中的部分
【发布时间】:2017-09-06 15:07:19
【问题描述】:

我已经设置了以下模板

base.html

{% extends 'base/main_base.html' %}

{% block main-content %}
    <h1>Header stuff<h1>
    ...
    {% block article-content %}
    {% endblock %}

{% endblock %}

article.html

{% extends 'base.html' %}
{% block article-content %}
   <h2>Content</h2>
   <p>More content</p>
{% endblock %}

现在,我将视图连接到 article.html,我想使用动态视图数据覆盖“base.html”模板中的“标题内容”。问题是,视图连接到从基础继承的 article.html。

有没有办法从子模板中覆盖部分基本模板?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    您可以在 base.html

    中创建另一个 template block
    {% extends 'base/main_base.html' %}
    
    {% block main-content %}
        <h1>{% block header %}Header stuff{% endblock %}<h1>
        ...
        {% block article-content %}
        {% endblock %}
    
    {% endblock %}
    

    并覆盖您的 article.html

    中的块
    {% extends 'base.html' %}
    
    {% block header %}My overwritten headline{% endblock %}
    
    {% block article-content %}
       <h2>Content</h2>
       <p>More content</p>
       ...
    {% endblock %}
    

    【讨论】:

      【解决方案2】:

      您还可以在 base.html 中检查“标题”值是否从文章(或任何其他视图)注入到模板中:

      base.html

      {% extends 'base/main_base.html' %}
      
      {% block main-content %}
          <h1>
              {% if header %}
                  {{ header }}
              {% else %}
                  Header stuff
              {% endif %}
          <h1>
          ...
          {% block article-content %}
          {% endblock %}
      
      {% endblock %}
      

      【讨论】:

        猜你喜欢
        • 2020-01-10
        • 2014-10-17
        • 1970-01-01
        • 1970-01-01
        • 2017-04-01
        • 2021-02-11
        • 2017-08-22
        • 2011-07-21
        • 2017-11-24
        相关资源
        最近更新 更多