{%扩展了“ base.html” %}和{%块内容%}在if语句中(Django应用) [英] {% extends "base.html" %} and {% block content %} inside if statement (Django app)

查看:76
本文介绍了{%扩展了“ base.html” %}和{%块内容%}在if语句中(Django应用)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In a Django template, I want to show different things to authenticated and unauthenticated users.

具体地,类似于以下内容:

Specifically, something like the following:

{% 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扩展给经过身份验证的用户,对于未经身份验证的用户,我想有一个普通的模板。

In other words, I want to extend base.html only for authenticated users, for non-authenticated ones, I want to have a plain template.

我不断收到 TemplateSyntaxError:无效的块标记{%endif%}

我该怎么做?

有问题的应用是使用Django 1.5的老式Django应用。

The app in question is a legcy Django app, using Django 1.5.

推荐答案

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

{% extends var %} must always be the first tag in a template.

您可以使用一个空模板并对其进行扩展。
尝试反转逻辑并将其拉到顶层:

You can use an empty template and extend that for your purpose. Try inverting the logic and pulling out the block to the top level:

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

这篇关于{%扩展了“ base.html” %}和{%块内容%}在if语句中(Django应用)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆