【问题标题】:Django DetailView Template show get_FIELDNAME_display() values of all fieldsDjango DetailView 模板显示所有字段的 get_FIELDNAME_display() 值
【发布时间】:2012-04-23 21:18:32
【问题描述】:

我制作了一个模板来显示模型中的所有字段和值,它看起来像这样:

## detail_template.html ##
<html>
<body>
{% for name, value in object.get_fields %}
    <p>
        <label>{% trans name %}:</label>
        <span>{{ value|default:"Not available" }}</span>
    </p>
{% endfor %}
</body>
<html>

在类中你可以看到声明的字段和函数:

## models.py ##
Class Object:
    GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )    

    name = models.CharField(verbose_name=u"Full name", max_length=200, blank=True, null=True)
    sex =   models.CharField(verbose_name=u"Sex", max_length=1, choices=GENDER_CHOICES)
    birthdate = models.DateField(verbose_name=u"Birth date", help_text="Format: DD/MM/AAAA", blank=True, null=True)
    status = models.IntegerField(verbose_name=u"Status", db_index=True, default=1)
    #...tons of other fields...

    def get_status_display(self):
        if self.status == 1:
            return "Active"
        else if self.status == 0:
            return "Inactive"
        else:
            return "Dead"

    def get_birthdate_display(self):
        return self.birthdate.strftime("%d/%m/%Y")

    def get_fields(self):
        return [(field.verbose_name, self._get_FIELD_display(field)) for field in self.__class__._meta.fields]

*已经显示的是:
全名:不可用(因为我留空了)
性别:男(而不是 M)
出生日期:2012 年 4 月 10 日(不是 get_birthdate_display 返回的格式)
状态:3(不是 get_status_display 中返回的字符串)


*我要显示的是:
全名:不可用(因为我留空了)
性别:男(而不是 M)
出生日期:20/10/1952(格式在 get_birthdate_display 中)
状态:死亡(get_status_display 中返回的字符串)


所以我想在没有手动操作的情况下获得 get_FIELDNAME_display :

<p>
    <label>{% trans 'Full name' %}:</label>
    <span>{{ object.name|default:"Not available" }}</span>
</p>    
<p>
    <label>{% trans 'Sex' %}:</label>
    <span>{{ object.get_sex_display|default:"Not available" }}</span>
</p>
<p>
    <label>{% trans 'Birth Date' %}:</label>
    <span>{{ object.get_birthdate_display|default:"Not available" }}</span>
</p>
<p>
    <label>{% trans 'Status' %}:</label>
    <span>{{ object.get_status_display|default:"Not available" }}</span>
</p>

感谢您的帮助!提示

【问题讨论】:

    标签: django templates django-templates formatting detailview


    【解决方案1】:

    不是特别漂亮,但您可以将模型中的 get_fields 方法更改为:

    def get_fields(self):
        pairs = []
        for field in self._meta.fields:
            name = field.name
            try:
                pairs.append((name, getattr(self, "get_%s_display" % name)()))
            except AttributeError:
                pairs.append((name, getattr(self, name)))
        return pairs
    

    【讨论】:

    • getattr(self, "get_%s_display" % name) 之后添加了()。认为你需要这些 - 但我还没有测试过。
    猜你喜欢
    • 2012-04-19
    • 2018-10-21
    • 2012-04-18
    • 1970-01-01
    • 2017-07-24
    • 2011-09-17
    • 2010-12-16
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多