2013-07-15 24 views
5

Öyle görünüyor bu gibi bir bloğun dışında bildirilen ise etiket çalışmıyor 'ile':Django: tag dış bloklarla

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

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

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

{% endwith %} 

my_var içeride geçirilen DEĞİLDİR beri sadece yukarıdaki şablon hiçbir şey göstermez Bu bloklar. Bunu nasıl aşabilirim?

+1

Sanırım "engellemek" sebebi. Sadece {% block test1%} {% with my_var1 = 1%}} {{my_var1}} {% endwith%} {% endblock%} 'çalışıp çalışmadığını doğrulayarak doğrulayabilir misiniz? – karthikr

+0

@karthikr Evet, eminim, sadece test edilmiş. Sebebi olabilirse Django 1.3 kullanıyorum. – Hellnar

+0

Django 1.6.1 ile aynı sorunu yaşıyorum. Bu problemi çözebildin mi? – jaw

cevap

0

Jinja2 ile Tornado'yu kullanmaktan Django'ya geldim ve (a) şablonda tanımlanamayan (görünümde değil) ve (b) temel şablonda mevcut olabilecek değişkenleri belirleyememekle çılgınca sürüldüm Bu türeten. Django-libs'tan gelen dört satırlık bir kod parçasına baktığımda, böyle iyi çalışan bir şey hazırlayabildim. İşte çeşitli bloklarda görünmesi gereken bir başlık dizesinin bir örneği.

settings.py - (1.10+ Django) şablonlara eklemek

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 - görünümlerinde 'başlığı' set vermeyen bir şablonu:

{% 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 %} 

Şimdi başlık türetilmiş şablonda tanımlanan ancak görünür olsa bile HTML iki yerde görünür üst şablonda.