首页 > 解决方案 > 将模板的一部分重构为自己的文件会破坏 django

问题描述

我有一些奇怪的东西:我有一个base.html作为网站块的骨架。它包含这部分:

<main class="main">
  {% block main %}
    <div class="content">
      {% block content %}
        content
      {% endblock %}
    </div>
  {% endblock %}
</main>

我也有一个base_with_sidebar.html看起来像这样的:

{% extends "core/base.html" %}

{% block main %}
  {{ block.super }}
  <div class="sidebar">
    {% block sidebar %}
      {% include "polls/recent_polls.html" %}
    {% endblock %}
  </div>
{% endblock %}

index.html填充内容:

{% extends "app/base_with_sidebar.html" %}
{% block content %}
  somecontent
{% endblock %}

到目前为止,这一切都有效。

如果我想重构,就会出现问题base.html:从此:

<main class="main">
  {% block main %}
    <div class="content">
      {% block content %}
        content
      {% endblock %}
    </div>
  {% endblock %}
</main>

对此: base.html

<main class="main">
  {% block main %}
    {% include './main.html' %}
  {% endblock %}
</main>

main.html

<div class="content">
  {% block content %}
    content
  {% endblock %}
</div>

这导致我index.html总是显示“内容”——而不是block contentindex.html

标签: django

解决方案


您不能覆盖包含模板中的块:

块在被包含之前被评估。这意味着包含来自另一个块的模板将包含已经评估和渲染的块 - 而不是可以被例如扩展模板覆盖的块。

https://docs.djangoproject.com/en/3.2/ref/templates/builtins/#include


推荐阅读