{%扩展“base.html”%}和{%block content%} if if statement(Django app)

时间:2015-11-12 19:07:45

标签: python django django-templates

在Django模板中,我想向经过身份验证和未经身份验证的用户显示不同的内容。

具体来说,如下所示:

{% if not user.is_authenticated %}
    <div class="margin">
    {{ group.topic }}
    </div>
{% else %}
    {% extends "base.html" %}
    {% load humanize %}
    {% block content %}
    <div class="margin">
        {{ group.topic }}
        <br>
        <b>members:</b>
            {% for member in members %}
            <a href="{% url 'profile' slug=member.username %}">{{ member.username }}</a>,&nbsp;
            {% endfor %}
        <hr size=1>
        <form action="{% url 'private_group_reply' slug=unique %}" method="POST" enctype="multipart/form-data">
            {% csrf_token %}
            <input type="hidden" id="id_link" name="unique" class="hidden_id" value="{{ unique }}">
            <br>{{ form.image }}<br>
            <br>{{ form.text }}<br>
            <input class="button" type="submit" value="OK" id="id_submit">
        </form>
        {% for reply in replies %}
        {{ reply.writer }}: {{ reply.text }},{{ reply.submitted_on|naturaltime }}<br>
        {% endfor %}

    {% endblock %}
{% endif %}

换句话说,我想仅为经过身份验证的用户扩展base.html,对于未经过身份验证的用户,我想要一个简单的模板。

我一直收到 TemplateSyntaxError:无效的块标记{%endif%}

我怎样才能做到这一点?

有问题的应用程序是一个使用Django 1.5 的legcy Django应用程序。

2 个答案:

答案 0 :(得分:4)

{% extends var %}必须始终是模板中的第一个标记。

您可以使用空模板并将其扩展以用于您的目的。 尝试反转逻辑并将块拉出到顶层:

<强> empty.html

{% block content %}
{% endblock %}

您的file.html

{% extends user.is_authenticated|yesno:"base.html,empty.html" %}
    {% load humanize %}
    {% block content %}
    {% if not user.is_authenticated %}
    <div class="margin">
    {{ group.topic }}
    </div>
{% else %}
    <div class="margin">
        {{ group.topic }}
        <br>
        <b>members:</b>
            {% for member in members %}
            <a href="{% url 'profile' slug=member.username %}">{{ member.username }}</a>,&nbsp;
            {% endfor %}
        <hr size=1>
        <form action="{% url 'private_group_reply' slug=unique %}" method="POST" enctype="multipart/form-data">
            {% csrf_token %}
            <input type="hidden" id="id_link" name="unique" class="hidden_id" value="{{ unique }}">
            <br>{{ form.image }}<br>
            <br>{{ form.text }}<br>
            <input class="button" type="submit" value="OK" id="id_submit">
        </form>
        {% for reply in replies %}
        {{ reply.writer }}: {{ reply.text }},{{ reply.submitted_on|naturaltime }}<br>
        {% endfor %}
{% endif %}
{% endblock %}

答案 1 :(得分:0)

我不认为extends可以在if块中使用。也许你应该考虑使用其他方式来做到这一点。这是合理的,因为你最好不要在模板中做逻辑事情。

其他解决方案就像,例如,渲染不同的模板文件取决于用户是否已登录。