1

对于继承一个块的 2 个子模板文件,{{ block.super }}不解析

Python 2.5.2、Django 1.0、Windows XP SP3

所涉及文件的示例框架代码:

  1. base.html
  2. item_base.html
  3. show_info_for_all_items.html
  4. show_info_for_single_item.html

文件 :base.html

{% block content %}
{% endblock %}

文件 :item_base.html

{% extends "base.html" %}
{% block item_info %}   
    Item : {{ item.name }}<br/>
    Price : {{ item.price }}<br/>   
{% endblock %}

文件 :show_info_for_all_items.html

{% extends "item_base.html" %}
{% block content %}
    <h1>info on all items</h1>
    <hr/>
    {% for item in items %}
        {% block item_info %}
            {{ block.super }}
        {% endblock %}
        <hr/>
    {% endfor %}
{% endblock %}

文件 :show_info_for_single_item.html

{% extends "item_base.html" %}
{% block content %}
    <h1>info on single item</h1>    
    {% block item_info %}
        {{ block.super }}
    {% endblock %}  
{% endblock %}

show_info_for_all_items.html显示项目列表以及每个项目的信息。

show_info_for_single_item.html显示带有项目信息的单个项目。

show_info_for_all_items.htmlshow_info_for_single_item.html共享相同的代码来显示项目信息,所以我把它item_base.html移到block item_info

但是{{ block.super }}inshow_info_for_all_items.htmlshow_info_for_single_item.html不起作用。{{ block.super }}解析为空白。

如果我将代码从其中移回block item_info并且item_base.htmlshow_info_for_all_items.html可以show_info_for_single_item.html 工作,但是我必须block item_info在 2 个文件中复制相同的代码。

如果 block.super 问题无法解决,Django 是否提供类似 INCLUDE =>{% INCLUDE "item_base.html" %}的功能,因此可以包含来自模板文件的块(而不是extends

如何避免block item_info在两个 html 文件中重复?

4

2 回答 2

5

Django 是否提供类似 INCLUDE (...)

是的!,只需看看文档:包括

将通用代码块放在foo.html中,然后在每个模板中:

{% include 'foo.html' %}
于 2008-11-21T20:40:23.373 回答
2

除了includeDZPM 提到的标签之外,您可能还需要考虑编写自定义包含标签

这种情况下的主要优点是调用模板不必使用与包含模板相同的变量名。您可以显示从名为“item”的变量以外的其他地方访问的项目:

{% show_item user.favorite_item %}
于 2008-11-22T03:40:09.797 回答