13

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

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

 {% stats_block user %}

其中 user 是包含所有用户信息的对象。我在考虑一个简单的模板标签,但是块很大,我不想把所有东西放在模板标签的一行中。

非常感谢!

4

2 回答 2

42

包含模板标签

您可以包含带有参数的模板

{% 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 %}

有关更多信息,请参阅有关模板继承的文档。

包含标签

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

于 2012-08-27T13:32:16.033 回答
1

您可以编写自定义模板标签,该标签可以呈现特定模板。请参阅包含标签

来自链接:另一种常见的模板标签类型是通过渲染另一个模板来显示一些数据的类型。

于 2012-08-27T13:32:41.260 回答