Django - “Include” a block in several templates? Template tag? Something else?

前端 未结 2 478
小鲜肉
小鲜肉 2020-12-29 10:21

I have a little statistics block that I want to be available in several places: the profile page of a user, and a search page with a list of users.

What would be th

相关标签:
2条回答
  • 2020-12-29 11:03

    You can write a custom template tag, which can render a specific template. Refer Inclusion tags.

    From the link: Another common type of template tag is the type that displays some data by rendering another template.

    0 讨论(0)
  • 2020-12-29 11:16

    include template tag

    You can include templates with arguments:

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

    Template inheritance

    But the best way to repeat a block in all templates, is to have a base template say 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>
    

    For example, the contact template could be as simple as:

    {% extends 'base.html' %}
    
    {% block body %}
        Contact use: foo@example.com
    {% endblock %}
    

    Refer to documentation on template inheritance for more.

    inclusion_tag

    Finally, another great option is to make an inclusion_tag, which allows to hook some python context processing before actual template inclusion.

    0 讨论(0)
提交回复
热议问题