この質問は次のものに関連しています (ただし、まったく同じではない可能性があります):
私の問題は次のとおりです。Django では、低レベルのデータベース オブジェクトの基本的な書式設定を常に再現しています。次に例を示します。
Person と Address の 2 つのクラスがあります。Person ごとに複数の Addresses があり、同じように設定します (それぞれのmodels.py内) 。
class Person(models.Model):
...
class Address(models.Model):
contact = models.ForeignKey(Person)
今、Person を見るときはいつでも、すべての Address を見たいと思っています。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 }}
私はこのコードを何度も繰り返していますが、多くの場合、テーブルにある場合など、マイナーなバリエーションがあり、< br > を < /td >< td > に置き換える必要があります。また、street_2 (またはその後の < br >) を表示したくない場合もあります。言うまでもなく、私が表現したい基本的な論理があります。それは、ブロックアンドコピーで持ち歩くのがさらに嫌いだということです!
私が欲しいのは、たとえば次のようなperson/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 の他のサブクラスにロジック/フォーマットを配置します (つまり、addresses/html4.py)。
カスタムタグを作成する
ヘルプ/洞察に感謝します!