访问django模型字段标签和help_text

frn*_*nhr 25 django

我有这样的事情:

class ContactData(models.Model):
    name  = models.CharField(max_length=300, verbose_name=u"Name", help_text=u"Please enter your name...",null=True, blank=False)
    phone = models.CharField(max_length=300, verbose_name=u"Phone number", null=True, blank=False)
Run Code Online (Sandbox Code Playgroud)

我想在模板中显示一个字段的标签和help_text(即 - 只是从视图中访问它).可以这样做吗?

小智 38

unicode(ContactData._meta.get_field('name').verbose_name)
unicode(ContactData._meta.get_field('name').help_text)

unicode(ContactData._meta.get_field('phone').verbose_name)
unicode(ContactData._meta.get_field('phone').help_text)
Run Code Online (Sandbox Code Playgroud)

  • 您无法访问模板中的任何字段. (3认同)

mii*_*otu 9

我知道这是旧的,但它应该得到一个可以在模板中使用的完整答案.

如果需要在模板中使用它,首选方法是添加获取这些值的模型方法,例如:

from django.db import models
from six import text_type

class ContactData(models.Model):
    name  = models.CharField(max_length=300, verbose_name=u"Name", help_text=u"Please enter your name...",null=True, blank=False)
    phone = models.CharField(max_length=300, verbose_name=u"Phone number", null=True, blank=False)

    def __get_label(self, field):
        return text_type(self._meta.get_field(field).verbose_name)

    def __get_help_text(self, field)
        return text_type(self._meta.get_field(field).help_text)

    @property
    def name_label(self):
        return self.__get_label('name')

    @property
    def name_help_text(self):
        return self.__get_help_text('name')

    @property
    def phone_label(self):
        return self.__get_label('phone')

    @property
    def phone_help_text(self):
        return self.__get_help_text('phone')
Run Code Online (Sandbox Code Playgroud)

然后,让我们说instance是你的模板中的对象,这是你的标签

<label for="id_phone">{{ instance.phone_label }}</label>
<div id="id_phone">{{ instance.phone }}</div>
Run Code Online (Sandbox Code Playgroud)

或者,您可以创建一个模板标记来执行此操作,但模型方法更清晰并保持模型自包含.