2013-07-15 11 views
5

それはのように思えるそれは、このように、ブロックの外側で宣言されている場合、タグが機能していない「と」:Djangoは:タグ外ブロックで

{% extends 'base.html' %} 
{% with my_var=1 %} 

{% block test1 %} 
{{my_var}} 
{% endblock %} 

{% block test2 %} 
{{my_var}} 
{% endblock %} 

{% endwith %} 

MY_VARは内部渡されていないので、単純に上記のテンプレートは何も表示されませんそれらのブロック。 どうすればこの問題を解決できますか?

+1

「ブロックする」理由は考えません。 {{%block test1%} {%with my_var1 = 1%} {{my_var1}} {%endwith%} {%endblock%} 'が動作するかどうかを確認するだけで確認できますか? – karthikr

+0

@karthikrはい、私はこれについて確信しています、ただテストしました。それが理由である可能性があるなら私はDjango 1.3を使います。 – Hellnar

+0

私はDjango 1.6.1と同じ問題があります。あなたはこの問題を解決できましたか? – jaw

答えて

0

私はDjangoにJinja2を使ってTornadoを使用しましたが、(a)テンプレートで定義することができ(ビューではない)、(b)を基本テンプレートで利用できる変数を設定できないということで、これが由来するものdjango-libsのコードのほんの4行目のコードを見ると、うまく機能しているようなものを試すことができました。次に、さまざまなブロックに表示されるタイトル文字列の例を示します。

settings.py - テンプレート(ジャンゴ1.10+)に追加

TEMPLATES = { 
    ... 
    builtins = ['mysite...wherever...templatetags',] 
} 

mysite.whereever.templatetags.py

from django import template 
register = template.Library() 

@register.simple_tag(takes_context=True) 
def setvar(context, key, value): 
    context.dicts[0][key] = value 
    return '' 

base.html

{% block settings %} 
    {% comment %} 
      Put this at the TOP of the template before 
      any blocks that use variables. 
    {% endcomment %} 
{% endblock settings %} 

<html> 
<head><title>{{title}}</title></head> 
<body><h1>My Site: {{title}}</h1> 
{% block body %} 
{% endblock body %} 
</body></html> 

menu.html - ビューで「タイトル」を設定していないテンプレート:

{% extends "base.html" %} 
{% block settings %} 
    {{ block.super }} {% comment %}optional{% endcomment %} 
    {% setvar 'title' 'Menu' %} 
{% endblock %} 
{% block body %} 
    <ul><li>Fish</li><li>Steak</li></ul> 
{% endblock %} 

今タイトルは、それが派生テンプレートで定義されますが表示されているにもかかわらず、HTMLでの2つの場所に表示されます。一番上のテンプレートに

関連する問題