Powiedz, że mam szablon
<html>
<div>Hello {{name}}!</div>
</html>
Podczas testowania przydatne byłoby zdefiniowanie wartości zmiennej bez dotykania kodu python, który wywołuje ten szablon. Więc szukam czegoś takiego
{% set name="World" %}
<html>
<div>Hello {{name}}!</div>
</html>
Czy coś takiego istnieje w Django?
django
django-templates
Alexis
źródło
źródło
Utwórz tag szablonu:
Aplikacja powinna zawierać
templatetags
katalog, na tym samym poziomie jakmodels.py
,views.py
itd Jeśli to nie istnieje, utwórz go - nie zapomnij o__init__.py
pliku, aby zapewnić katalog jest traktowany jako pakiet Pythona.Utwórz plik o nazwie
define_action.py
wewnątrz katalogu templatetags z następującym kodem:Uwaga: Serwer programistyczny nie uruchomi się automatycznie. Po dodaniu
templatetags
modułu konieczne będzie zrestartowanie serwera przed użyciem tagów lub filtrów w szablonach.Następnie w szablonie możesz przypisać wartości do kontekstu w następujący sposób:
źródło
add
:{% define counter|add:1 as counter %}
. Podobnie w przypadku innych operacji.Alternatywnym sposobem, który nie wymaga umieszczania wszystkiego w bloku „with”, jest utworzenie niestandardowego znacznika, który dodaje nową zmienną do kontekstu. Jak w:
To pozwoli ci napisać coś takiego w swoim szablonie:
Zauważ, że większość z tego została zabrana stąd
źródło
Istnieją sztuczki takie jak opisane przez Johna; jednak język szablonów Django według projektu nie obsługuje ustawiania zmiennej ( szablony można znaleźć w polu „Filozofia” w dokumentacji Django ).
Z tego powodu zalecanym sposobem zmiany dowolnej zmiennej jest dotknięcie kodu Pythona.
źródło
Najlepszym rozwiązaniem jest napisanie niestandardowego
assignment_tag
. To rozwiązanie jest bardziej czyste niż używaniewith
tagu, ponieważ zapewnia bardzo wyraźne oddzielenie logiki od stylu.Zacznij od utworzenia pliku znacznika szablonu (np.
appname/templatetags/hello_world.py
):Teraz możesz używać
get_addressee
tagu szablonu w swoich szablonach:źródło
Być może
default
filtr szablonu nie był opcją w 2009 roku ...źródło
{% with state=form.state.value|default:other_context_variable %}
zamiastother_context_variable
możemy również używać'string_value'
jako dobrzeTo nie jest ogólnie dobry pomysł. Wykonaj całą logikę w pythonie i przekaż dane do szablonu w celu wyświetlenia. Szablon powinien być możliwie najprostszy, aby osoby pracujące nad projektem mogły skupić się na projekcie, a nie martwić się logiką.
Na przykład, jeśli potrzebujesz pewnych informacji pochodnych w szablonie, lepiej jest umieścić je w zmiennej w kodzie python, a następnie przekazać je do szablonu.
źródło
Użyj instrukcji with .
Nie mogę sugerować kodu z pierwszego akapitu tej odpowiedzi . Może język szablonów zastąpił stary format.
źródło
W swoim szablonie możesz to zrobić w następujący sposób:
W tagach szablonów możesz dodać taki tag:
źródło