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.
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
@karthikr Evet, eminim, sadece test edilmiş. Sebebi olabilirse Django 1.3 kullanıyorum. – Hellnar
Django 1.6.1 ile aynı sorunu yaşıyorum. Bu problemi çözebildin mi? – jaw