对于继承块的2个子模板文件,{{ block.super }}
无法解析
Python 2.5.2,Django 1.0,Windows XP SP3
涉及文件的示例框架代码:
base.html
item_base.html
show_info_for_all_items.html
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.html
和show_info_for_single_item.html
共享相同的代码以显示商品信息,因此我将其移至item_base.html
进入block item_info
但{{ block.super }}
和show_info_for_all_items.html
中的show_info_for_single_item.html
不起作用。 {{ block.super }}
解析为空白。
如果我将代码从block item_info
中的item_base.html
移回show_info_for_all_items.html
和show_info_for_single_item.html
,那么它有效,但我必须在2中复制相同的block item_info
代码文件。
如果无法解决block.super问题,Django会提供类似INCLUDE =&gt;的内容吗? {% INCLUDE "item_base.html" %}
因此可以包含模板文件中的块(而不是extends
)
如何避免在两个html文件中重复block item_info
?
答案 0 :(得分:4)
Django是否提供类似的功能 包括(...)
是的!,请查看文档:{{3}}
将公共代码块放在 foo.html 中,然后在每个模板中:
{% include 'foo.html' %}
答案 1 :(得分:2)
除了DZPM提到的include
标记外,您可能还需要考虑编写custom inclusion tag。
这种情况下的主要优点是调用模板不必使用与包含的模板相同的变量名称。您可以显示从名为“item”的变量以外的某个位置访问的项目:
{% show_item user.favorite_item %}