Kiedy masz „funkcjonalność” (konkretnie warunek if) wewnątrz pętli, masz okazję, aby przenieść to do funkcji widoku.
Pierwszy
ten konstrukt
{% for physician in physicians.all %}
{% if physician.service_patients.count %}
{% endif %}
{% endfor %}
jest tak powszechne, że masz kilka sposobów, aby tego uniknąć.
Zmień model. Dodaj test patients" method and use it instead of the default query set that you get with a on-to-many relationship. This method of your model has the
, jeśli service_patients.count`, usuwając go z szablonu.
Eliminuje to {% if%} z szablonu, redukując go do {% dla%} i rzeczywistego HTML, który nie może być łatwo wyeliminowany.
Zmień funkcję widoku. Napisz kilka linijek kodu, aby utworzyć listę lekarzy z usługami służby zdrowia zamiast uproszczonego zbioru lekarzy. Ten kod w funkcji widoku ma test if service_patients.count
, usuwając go z szablonu.
Eliminuje to {% if%} z szablonu, redukując go do {% za%} i rzeczywistego kodu HTML, którego nie można łatwo wyeliminować.
Chodzi o to, aby pozbyć się {% if%}, aby po prostu wycinać i wklejać {% for%} i rzeczywisty HTML. Utrzymując szablon tylko HTML (które nie mogą być wyeliminowane), jedynym napowietrznych jest {% for%}
drugie
Wydaje się, że chcesz wykorzystać ponownie {% include %}
skonstruować w nieco różnych kontekstów .
Nie jest wcale jasne, jaki jest problem z tym plikiem {% include %}
. To "oczekiwanie, że lista pacjentów o nazwie patients
" wydaje się powierzchownie głupia. Napraw to, więc oczekuje physician.patients
.
Być może chcesz użyć tej samej listy dwa razy. Raz z listą o nazwie 'patients'
i raz z listą o nazwie 'physician.patients'
. W takim przypadku rozważ (a) uproszczenie lub (b) napisanie znacznika szablonu.
Wygląda na to, że masz listę pacjentów, która czasami jest stroną autonomiczną, a inne sytuacje są powtarzane wielokrotnie na znacznie bardziej złożonej stronie. Powtarzanie listy szczegółów osadzonych na jakiejś dłuższej liście nie jest tak naprawdę najlepszym projektem strony.Django ci w tym nie pomoże, bo - szczerze mówiąc - nie jest łatwo korzystać z tego. Stąd opcja (a) - rozważ przemodelowanie tej "listy pacjentów na liście lekarzy" jako zbyt złożonej.
Zawsze można jednak utworzyć znaczniki szablonów, aby tworzyć naprawdę złożone strony.
Podsumowanie
Jest to naprawdę dobry powód, dla którego język szablon Django ma ograniczoną funkcjonalność. Cała twoja funkcja powinna być albo istotną cechą twojego modelu, albo cechą bieżącej aplikacji, która używa tego modelu.
Prezentacja jest po prostu tłumaczeniem obiektów (i zapytań) na HTML. Nic więcej
Dziękujemy! Szukałem tagu "as". Myślę, że "z" też działa. – slypete
Jako Django 1.3 można również użyć stylu: '{% include" sometemplate.html "ze spamem = jaja, szynka =" Ham! " %} '. –