Peaches491
Peaches491

Reputation: 1239

Rendering Django template from withing template

So, I have a number of objects I wish to render in a loop. I.E. 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!

Upvotes: 0

Views: 41

Answers (1)

catavaran
catavaran

Reputation: 45555

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

Upvotes: 2

Related Questions