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

zzb*_*bil 0 authentication django 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 %}
Run Code Online (Sandbox Code Playgroud)

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

感谢帮助!

aum*_*umo 5

您不能将extends标签放入if/else

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

{% extends base_template_name %}
Run Code Online (Sandbox Code Playgroud)

如果您希望全局应用此机制,定义此类变量的最佳位置是在上下文处理器中,例如:

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,
    }
Run Code Online (Sandbox Code Playgroud)

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