这个问题与(但可能不完全相同):
Does Django have HTML helpers?
我的问题是:在 Django 中,我不断地为低级数据库对象重现基本格式。这是一个例子:
我有两个类,Person 和 Address。每个人都有多个地址,设置如下(在各自的 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() } )
而且,我有一个模板,persons/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 >。其他时候,我不想显示 street_2(或它后面的 < br >)。总而言之,我想表达一个基本的逻辑,我更不愿意带着 block 和复制来搬运!
我想要的是一个 persons/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)
创建自定义标签
非常感谢帮助/见解!
最佳答案
听起来像 inclusion tag是你要找的。您可以为每个主要变体都有一个模板和标签,并使用标签的参数根据需要为每个模板自定义上下文。
基本标签定义:
@register.inclusion_tag('person/address.html')
def display_address(address):
return {'address': address}
在模板中使用(假设包含它的 templatetag 模块已经被{% load %}
-ed):
{% display_address address %}
关于python - 在 Django 中,放置 HTML 格式数据的简短片段的最佳位置在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/146789/