基于用户身份验证的Django变更基础模板

基于用户身份验证的Django变更基础模板,django,authentication,django-templates,Django,Authentication,Django Templates,我有两个基本模板:base.html和base_visitor.html。如果用户经过身份验证,则扩展base.html;如果用户未经过身份验证,则扩展base\u vistior.html。我已经试过了: {% if user.is_authenticated %} {% extends 'base.html' %} {% else %} {% extends 'base_visitor.html' %} {% endif %} {% block title %}{{ title }

我有两个基本模板:base.html和base_visitor.html。如果用户经过身份验证,则扩展base.html;如果用户未经过身份验证,则扩展base\u vistior.html。我已经试过了:

{% if user.is_authenticated %}
  {% extends 'base.html' %}
{% else %}
  {% extends 'base_visitor.html' %}
{% endif %}

{% block title %}{{ title }}{% endblock %}
{% block body %}

<h1>Title</h1>

{% if models %}
  {% for model in models %}
  <h2>{{ model.model_number }}<h2>
  {% endfor %}


{% else %}
<h3>NO models</h3>

{% endif %}





{% endblock %}
{%if user.u经过身份验证%}
{%extends'base.html%}
{%else%}
{%extends'base_visitor.html%}
{%endif%}
{%block title%}{{title}{%endblock%}
{%block body%}
标题
{%if模型%}
{%用于模型中的模型%}
{{model.model_number}
{%endfor%}
{%else%}
没有模型
{%endif%}
{%endblock%}
但由于某种原因,这给了我一个错误:“第3行的块标记无效:'else'。您忘记注册或加载这个标记了吗?”


谢谢你的帮助

如果/
否则
块中不能放置
扩展
标记

但是,您可以为模板参数使用变量,例如:

{% extends base_template_name %}
如果您希望在全球范围内应用此机制,定义此类变量的最佳位置是,例如:

def基本模板名称上下文处理器(请求):
#如果使用Django<2.0,则使用request.user.is_authenticated()
如果request.user.u经过身份验证:
base\u template\u name='base.html'
其他:
base\u template\u name='base\u visitor.html'
返回{
“基本模板名称”:基本模板名称,
}

若要将此上下文处理器插入模板引擎,请检查。

如果
/
否则
块,则不能将
扩展
标记放入

但是,您可以为模板参数使用变量,例如:

{% extends base_template_name %}
如果您希望在全球范围内应用此机制,定义此类变量的最佳位置是,例如:

def基本模板名称上下文处理器(请求):
#如果使用Django<2.0,则使用request.user.is_authenticated()
如果request.user.u经过身份验证:
base\u template\u name='base.html'
其他:
base\u template\u name='base\u visitor.html'
返回{
“基本模板名称”:基本模板名称,
}

要将此上下文处理器插入模板引擎,请检查。

太棒了!伟大的想法在我意识到
request.user.is\u authenticated
是一个属性而不是一个方法之前,不会被一个错误所使用,因此之后不应该有括号。@wjakobw是的,他们在Django 2.0中更改了这一点,这太棒了!伟大的思想在我意识到
request.user.is\u authenticated
是一个属性而不是一个方法之前,不会被一个错误所使用,因此之后不应该有括号。@wjakobw是的,他们在Django 2.0中更改了这一点