2015-07-31 6 views
8

Web sayfamın navigasyon sisteminde, her sayfa oluşturulduğunda güncel bilgilerle doldurulacak bir tablo var. Her bir view numaralı telefona aşağıdaki kodu nasıl koyabilirim? Flask ile tüm Jinja2 şablonlarına geçiş değişkenleri

def myview(): 
    mydict = code_to_generate_dict() 
    return render_template('main_page.html',mydict=mydict) 

mydict

tablosunu doldurmak için kullanılır. Tablo her sayfada gösterilecektir.

cevap

15

Sen jinja şablonları İşte

içine globalsi enjekte etmek Flask's Context Processors kullanabileceğiniz bir örnektir:

@app.context_processor 
def inject_dict_for_all_templates(): 
    return dict(mydict=code_to_generate_dict()) 

, otomatik bir şablon bağlamında yeni değişkenler enjekte etmek bağlam Flask'ta işlemciler var. Bağlam işleyicileri, şablonunun oluşturulmasından önce çalışır ve şablon içeriğini içine yeni değerler enjekte etme yeteneğine sahiptir. Bir içerik işlemci, bir sözlüğü döndüren bir işlevdir. belki

+0

yüzden başkaları için kafa karıştırıcı değil Mevcut tüm şablonları değiştirmenizi gerektirir vermedi: Bu sözlüğün anahtarlar ve değerler ardından uygulamanın tüm şablonları için, şablon bağlamıyla birleştirilir Flask'ın döndürülmesi gereken bir 'dict' aradığını, benim değişkenimin enjekte edilip edilmediğini bir "string", "list" veya başka bir veri türü (bir "dict" dahil) olup olmadığını –

1

Kendi render yönteminizi yazın, bu kodu tekrar etmekten kaçının. Daha sonra bir şablon oluşturmaya ihtiyaç duyduğunuzda bunu arayın.

def render_with_dict(template): 
    mydict = code_to_generate_dict() 
    return render_template(template, mydict=mydict) 

def myview(): 
    return render_with_dict('main_page.html') 
+0

Josh'un cevabı ben –