2011-01-12 14 views
19

Mam pięć stron z tym samym układem strony i strukturą, ale z różnymi kolorami, tekstem itp., Więc jest to idealne środowisko do szablonów. Postanowiłem użyć Jinja2 i prawdopodobnie butelki. Przeczytałem dokumentację i kilka samouczków online, które wyjaśniają wiele o tym, co można zrobić za pomocą szablonów na stronie, ale nie wiele o tym, jak wysyłać zmienne do strony.Gdzie przechowujesz zmienne w jinja?

  • Gdzie przechowujesz zmienne specyficzne dla strony?
  • Skąd wiadomo, która strona była żądana i jakie zmienne załadować?
+1

Kolba to dobry wybór. Jego samouczek mniej lub bardziej odpowiada na twoje pytania: http://flask.pocoo.org/docs/quickstart/#rendering-templates. Zwróć również uwagę, jak '@ app.route' określa adres URL. – 9000

+0

Dzięki - mam mieć skrypt Pythona dla każdej strony, zadeklarować zmienne w każdym skrypcie python, a następnie przekazać je do template.render? –

Odpowiedz

48

Oto podstawowe użytkowanie:

Najpierw utworzyć szablon

>>> from jinja2 import Template 
>>> template = Template('Hello {{ name }}!') 

Następnie czyni go przechodząc zmienne

>>> template.render(name='John Doe') 
u'Hello John Doe!' 

Zwykle chcesz załadować szablony z plików zamiast kod. To jest bardziej wydajny i zoptymalizowany i pozwala dziedziczenia szablonów:

from jinja2 import Environment, PackageLoader 
env = Environment(loader=PackageLoader('yourapplication', 'templates')) 

że będzie szukać szablonów wewnątrz folderu templates pakietu yourapplication Pythona, jak zainstalowany w ścieżce Pythona. Możesz użyć innych programów ładujących do załadowania z określonego systemu plików lub innych miejsc.

Następnie można załadować szablon:

template = env.get_template('mytemplate.html') 
print template.render(the='variables', go='here') 

Podczas korzystania Flask to wszystko jest skonfigurowane dla ciebie, więc można po prostu użyć render_template funkcję kolby i to będzie już szukać templates podfolderze aplikacji:

from flask import render_template 

@app.route('/hello/') 
def hello(name=None): 
    return render_template('hello.html', name=name) 

Uwaga zmienna szablonu (znany również jako kontekst) są przekazywane do render_template

Jinja ma dość good documentation. Proszę przeczytaj to. Zapraszam do zadawania dalszych pytań.

1

Edit: Mam google interweb w poszukiwaniu odpowiedzi i znalazłem kilka artykułów, które mogą pomóc (całkiem pewien, że pomogliśmy mnie)

http://dbanck.de/2009/01/13/using-jinja2-with-django/

http://www.hindsightlabs.com/blog/2010/03/15/jinja2-and-django-4ever/ (dead)

http://djangosnippets.org/snippets/1061/

+0

Wybór linków bez żadnej ekspertyzy nie jest pomocny, -1 ode mnie. – jwbensley

+0

@jwbensley Awww, nie jest pomocne, ponieważ kopiowanie wklejanie jest wyłączone? Oto wyjaśnienie: przeczytaj ...Ale także twoje głosowanie w dół jest uzasadnione, ponieważ byłem leniwy lub w pośpiechu (nie pamiętam). – StefanNch

+0

Po prostu wklejenie linków prowadzi do zgnilizny, co jest oczywiste, ponieważ teraz zaznaczyłeś jeden z tych linków jako martwy. – jwbensley

Powiązane problemy