python - 在 Django 中,放置 HTML 格式数据的简短片段的最佳位置在哪里?

标签 python django model-view-controller design-patterns

这个问题与(但可能不完全相同):

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 似乎有以下(似是而非的)选项:

  1. 将格式放入models.py

  2. 将逻辑/格式放在 views.py 中

  3. 将逻辑/格式放在 Person 或 Address 的其他一些子类中(即 addresses/html4.py)

  4. 创建自定义标签

非常感谢帮助/见解!

最佳答案

听起来像 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/

相关文章:

ios - 在 UITableViewCell 中显示复杂数据

model-view-controller - grails和MVC表单体系结构-每个表单使用两个操作..一般的行业模式?

javascript - 使用 flask 和 javascript 的动态事件源

python - Django - 格式化计算间隔

model-view-controller - 什么是 SOFEA?

python - "Django-insecure"在 Django 的 settings.py 中的 key 中

python - 如何在 virtualenv 上安装旧版本的 Django?

python - 在 Django 中保存或显示表单数据的最简单方法

python - 在 Python 中将 click.progressbar 与多处理一起使用

python - 如何在 Python 中将 CIDR 前缀转换为点分四组网络掩码?