Django - 在几个模板中“包含”一个块?模板标签?别的什么?

时间:2012-08-27 13:25:28

标签: django block django-templates

我有一个小的统计数据块,我希望在几个地方可用:用户的个人资料页面和包含用户列表的搜索页面。

重复这个区块的最佳方法是什么? 我来自PHP背景,在PHP中,它将是一个简单的包含传递一些简单的参数。在django中,我基本上希望能够调用类似的东西:

 {% stats_block user %}

其中user是包含所有用户信息的对象。我在想一个简单的模板标签,但是这个块非常大,我不想把eveything放在模板标签的一行中。

非常感谢!

2 个答案:

答案 0 :(得分:43)

包括模板标记

你可以include templates with arguments

{% include "name_snippet.html" with person="Jane" greeting="Hello" %}

模板继承

但是,在所有模板中重复块的最佳方法是使用base.html:

作为基本模板
<html>
...
    <div id="user-block">
        {% if request.user.is_authenticated %}
            hello {{ request.user }}
        {% else %}
            <a href="{% url acct_signup %}">Sign up!</a>
        {% endif %}
    </div>
 ...
    <div id="body">
        {% block body %}
        {% endblock %}
    </div>
 ...
 </html>

例如,联系人模板可以简单如下:

{% extends 'base.html' %}

{% block body %}
    Contact use: foo@example.com
{% endblock %}

有关详情,请参阅documentation on template inheritance

使用inclusion_tag

最后,另一个很好的选择是创建一个inclusion_tag,它允许在实际模板包含之前挂钩一些python上下文处理。

答案 1 :(得分:1)

您可以编写自定义模板标记,该标记可以呈现特定模板。 请参阅Inclusion tags

从链接:另一种常见类型的模板标记是通过呈现另一个模板来显示某些数据的类型。