Bir jinja2 şablon şöyle dönerseniz: return render_response('home.htm', **context)
Jinja 2 şablonundan güncel değişkenlerin listesi nasıl alınır?
Nasıl ardından şablonun içinden bağlamda değişkenlerin listesini alabilirim?
Bir jinja2 şablon şöyle dönerseniz: return render_response('home.htm', **context)
Jinja 2 şablonundan güncel değişkenlerin listesi nasıl alınır?
Nasıl ardından şablonun içinden bağlamda değişkenlerin listesini alabilirim?
Teknik olarak, bağlam adlandırılmış bir sözlük olarak aktarılmadığı için, bir şablonun içinden bağlam değişkenlerinin bir listesini oluşturmak için küçük bir çalışma yapılması gerekir. Yine de mümkündür.
esasen küresel değişkenler sözlüğü jinja2.Context nesnesi,/fonksiyonları
genel ad alanında bu fonksiyon kullanılabilir yapın dönmek için bir Jinja context function tanımlayın; jinja2.Environment ya da jinja2.Template globals sözlüğü
İsteğe bağlı olarak, nesneleri nesnelere göre filtreleyin; Örneğin, Jinja'nın varsayılan global yardım işlevlerini (aralık, marangoz vb.) atlamak için callable()
kullanın. Bu bağlam işlevinde veya şablonda yapılabilir; nerede olursa olsun en mantıklı.
Örnek:
>>> import jinja2
>>>
>>> @jinja2.contextfunction
... def get_context(c):
... return c
...
>>> tmpl = """
... {% for key, value in context().items() %}
... {% if not callable(value) %}
... {{ key }}:{{ value }}
... {% endif %}
... {% endfor %}
... """
>>>
>>> template = jinja2.Template(tmpl)
>>> template.globals['context'] = get_context
>>> template.globals['callable'] = callable
>>>
>>> context = {'a': 1, 'b': 2, 'c': 3}
>>>
>>> print(template.render(**context))
a:1
c:3
b:2
[Alternatif olarak, diğer çözüm çalışması için ('home.htm', context=context)
ile render_response
diyoruz.] Burada
Çok teşekkürler. Üstün Jinja2 bilginize yayılıyorum. – Christian
"Callable" denetimi nedeniyle çözümünüzün, içeriğin bir parçası olarak açıkça iletilmiş işlevleri göz ardı edeceğini unutmayın. Muhtemelen sık sık olmaz, ama bir fark yaratabilir. –
Doğru. Bu basit çözüm kesinlikle geliştirilebilir. Örneğin, '' '' '' '' '' 'global'' ise' 'get_context()' '' 'context'' temelli yeni bir sözlük döndürür, ancak' 'template.globals'''da da bulunan anahtarlar olmadan. – Garrett
nasıl bir Matara uygulamasından çalışan @crewbum's answer almak için yapılması gerekenler:
import jinja2
@jinja2.contextfunction
def get_context(c):
return c
app.jinja_env.globals['context'] = get_context
app.jinja_env.globals['callable'] = callable
Bunu nereye koyarsınız? – johnny
Uygulama başlatılırken (veya uygulama fabrikasında). Eğer flask-sqlalchemy, flask-login, vb. Gibi herhangi bir flask uzantısı kullanırsanız, bunlar oluşturuldukları yer ile aynı olabilir. –
Readin nasıl g şablon kaynağı? Bunun derdi ne? –