2017-04-15 67 views
0

我有两个基本模板:base.html和base_visitor.html。如果用户通过身份验证,我希望base.html扩展,如果用户未通过身份验证,我希望base_vistior.html。我已经尝试过这样的:基于用户身份验证的Django更改基本模板

{% 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行:?‘别人’你忘记注册或加载此标签”

帮助表示赞赏!

回答

1

您不能将extends标签放在if/else块中。

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

{% extends base_template_name %} 

如果你想在全球范围内应用这一机制,来定义这样的变量将是最好的地方在context processor,例如:

def base_template_name_context_processor(request): 
    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

+0

太棒了!好想法 – adamteale