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

Alb*_*lla 13 django block django-templates

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

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

 {% stats_block user %}
Run Code Online (Sandbox Code Playgroud)

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

非常感谢!

jpi*_*pic 43

包含模板标签

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

{% include "name_snippet.html" with person="Jane" greeting="Hello" %}
Run Code Online (Sandbox Code Playgroud)

模板继承

但是在所有模板中重复块的最佳方法是使用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>
Run Code Online (Sandbox Code Playgroud)

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

{% extends 'base.html' %}

{% block body %}
    Contact use: foo@example.com
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

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

使用inclusion_tag

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