2017-04-15 4 views
0

base.htmlとbase_visitor.htmlという2つの基本テンプレートがあります。私は、ユーザーが認証されている場合は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ブロックに入れることはできません。

ただしテンプレートパラメータ、例えば変数を使用することができます:あなたは、このメカニズムがグローバルに適用する場合は、そのような変数を定義するのに最適な場所はcontext processor、元になる

{% extends base_template_name %} 

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

関連する問題