当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在Django中,哪里是放置HTML格式数据的短片段的最佳位置?》经验,为你挑选了1个好方法。

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

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() } )

并且,我有一个模板,persons/details.html,带有代码,例如,像 - 所以:

{% extends "base.html" %}

{% for address in addresses %}
{{ address.name }}
  {{ address.type }} 
{{ address.street_1 }}
{{ address.street_2 }}
{{ address.city }} {{ address.stateprov }} {{ address.postalcode }}
{{ address.country }}
{{ endfor }}

我正在重复这段代码,通常会有很小的变化,例如当它在表格中时,然后
必须用 代替.其他时候,我不希望显示street_2(或其后的
).总而言之,我想表达的基本逻辑是,我更不愿意用块和副本来兜售!

我想要的是一个人/ details.html,例如,以下内容:

{% extends "base.html" %}
{% for address in addresses %} 
  {% address.as_html4 %}
{% endfor %}

如果我想要内联表,那就像(我猜!):

{% extends "base.html" %}

{% for address in addresses %}
  
{% endfor %}
{% address.as_html4 %}

那么问题是:放置格式的最佳位置在哪里?逻辑?

Django似乎有以下(似是而非的)选择:

    将格式放在models.py中

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

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

    创建自定义标签

帮助/见解非常感谢!



1> Jonny Buchan..:

听起来像包含标签是你正在寻找的.您可以为每个主要变体设置模板和标记,并使用标记的参数根据需要自定义每个模板的上下文.

基本标签定义:

@register.inclusion_tag('person/address.html')
def display_address(address):
    return {'address': address}

在模板中使用(假设包含它的templatetag模块已经被{% load %}-ed):

{% display_address address %}

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有