我有两个基本模板: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'。您是否忘记注册或加载此标记?”
非常感谢帮助!
答案 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。