2016-07-18 8 views
0

変数を1回設定し、2つの異なるブロックタグで2回使用します。これは私がそれをやった方法です:Djangoテンプレート:ブロックタグで変数を使用する

something.html

{% extends "base.html" %} 

{% with title="Hellville De Luxe" %} 
    {% block title %}{{ title }}{% endblock %} 
    {% block description %} {{ title }} {% endblock %} 
{% endwith %} 

base.html

<title>{% block title %}{% endblock %}</title> 
<meta name="description" content="{% block description %}{% endblock %}"> 

は動作しませんでしたし、なぜだろうか。私はDjangoが変数をその値で置き換えると思った。 {{ title }}を文字列に置き換えると、次のようになります。{% block title %}Hats are cool{% endblock %}完全にレンダリングされます。

私は何かが見つからないのですか?これは本当にばかげていますか?

ありがとうございます。

+0

変数 'title'のスコープは宣言されているブロックです – Gocht

+0

' {%block title%} 'の名前を何かに変更したら、どうなるのでしょうか – Cheng

+4

テンプレートを拡張すると思います。ブロックの外にあるものはレンダリングも処理もしません。それは彼らが働く方法です。 – Sayse

答えて

0

テンプレートタグを定義するのが最も簡単な方法です。テンプレートファイルのディレクトリに移動してpyファイルを作成して、define_variable_tag.pyと言うことができます。

from django.template import Library 
register = Library() 
somevariable = "first_text" 
@register.simple_tag 
def define_variable(variable): 
    global somevariable 
    somevariable = variable 
    return somevariable 

@register.simple_tag 
def get_variable(): 
    global somevariable 
    return somevariable 

そして、あなたのテンプレートでは、テンプレートの初めに、あなたのテンプレートタグ{% load define_variable_tag %}をロードする必要がありますし、このようにそれらを使用することができます。

{% define_variable "something "%} 
<h3>Some Text</h3> 
{% get_variable %} 

この{% get_variable %}はあなたに "何か" を返します。テンプレートのどこにでも使用できます。

関連する問題