简体   繁体   中英

Rendering Django template from withing template

So, I have a number of objects I wish to render in a loop. IE Render each of the 5 latest posts on the home page. Each of these posts will be displayed differently whether or not the user is logged in.

I have a question: How would I go about making this distinction? I imagine having a template like this

{% if user.is_logged_in %}
    {% for post in latest_posts %}
        post.render_long_form
    {% endfor %}
{% else %}
    {% for post in latest_posts %}
        post.render_short_form
    {% endfor %}
{% endif %}

How can I make the functions render_short_form and render_long_form return the appropriate HTML snippits? I would like them to call other templates for rendering under the hood.

Thanks!

Why don't not use {% include %} tag?

{% if user.is_logged_in %}
    {% for post in latest_posts %}
        {% include 'long_form.html' %}
    {% endfor %}
{% else %}
    {% for post in latest_posts %}
        {% include 'short_form.html' %}
    {% endfor %}
{% endif %}

Or, more DRY version:

{% for post in latest_posts %}
    {% if user.is_logged_in %}
        {% include 'long_form.html' %}
    {% else %}
        {% include 'short_form.html' %}
    {% endif %}
{% endfor %}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM