Этот вопрос относится (но, возможно, не совсем так):
Есть ли в Django помощники по HTML?
Моя проблема заключается в следующем: в Django я постоянно воспроизводлю базовое форматирование низкоуровневых объектов базы данных. Вот пример:
У меня есть два класса, Персона и Адрес. Есть несколько адресов для каждого человека, настройте likeo (в соответствующих models.py )
class Person(models.Model):
...
class Address(models.Model):
contact = models.ForeignKey(Person)
Теперь, когда я смотрю на Человека, я хочу видеть все его Адреса. Итак, предположим, что Persons / views.py имеет что-то похожее:
def detail(request, person_id):
person = get_object_or_404( Person, pk=person_id )
return render_to_response('persons/details.html',
{ 'title' : unicode(person), 'addresses': person.address_set.all() } )
И у меня есть шаблон, person / details.html , с кодом, например, вот так:
{% extends "base.html" %}
{% for address in addresses %}
<b>{{ address.name }}</b>
{{ address.type }} <br>
{{ address.street_1 }}<br>
{{ address.street_2 }}<br>
{{ address.city }} {{ address.stateprov }} {{ address.postalcode }}<br>
{{ address.country }}
<hr>
{{ endfor }}
Я повторяю этот код довольно часто, часто с небольшими изменениями, например, когда он находится в таблице, а затем
должен быть заменен на
. В других случаях я не хочу отображать улицу_2 (или
после нее). Скажем так, есть фундаментальная логика, которую я хочу выразить, что мне еще больше не хочется копаться в блоке и копировать!
Я хочу персон / details.html , например, со следующим:
{% extends "base.html" %}
{% for address in addresses %}
{% address.as_html4 %}
{% endfor %}
А если мне нужна встроенная таблица, то что-то нравится (наверное!):
{% extends "base.html" %}
<table><tr>
{% for address in addresses %}
<tr><td> {% address.as_html4 </td><td> %} </td></tr>
{% endfor %}
</table>
Тогда возникает вопрос: где лучше всего разместить форматирование? Логика?
У Django, кажется, есть следующие (вероятные) варианты:
Поместите форматирование в models.py
Поместите логику / форматирование в views.py
Поместите логику / форматирование в некоторый другой подкласс Person или Address (например, address / html4.py)
Создание пользовательских тегов
Помощь / понимание очень ценится!