Django根据用户身份验证更改基本模板

时间:2017-04-15 09:51:38

标签: django authentication django-templates

我有两个基本模板:base.html和base_visitor.html。如果用户经过身份验证,我希望扩展base.html,如果用户未经过身份验证,我希望扩展base_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 %}

但由于某种原因,这给了我一个错误:“第3行的无效块标记:'else'。您是否忘记注册或加载此标记?”

非常感谢帮助!

1 个答案:

答案 0 :(得分:3)

您无法将extends标记放在if / else块中。

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

{% extends base_template_name %}

如果您希望全局应用此机制,则定义此类变量的最佳位置将位于context processor,例如:

def base_template_name_context_processor(request):
    # Use request.user.is_authenticated() if using Django < 2.0
    if request.user.is_authenticated:
        base_template_name = 'base.html'
    else:
        base_template_name = 'base_visitor.html'

    return {
        'base_template_name': base_template_name,
    }

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