Django - 创建自定义模板标签以显示模型名称

时间:2018-01-10 00:05:24

标签: python django python-3.x django-templates django-custom-tags

我有一个模特:

class Survey(models.Model):
name = models.CharField(max_length = 200)

def __str__(self):
    return self.name

在我的模板中,我想显示当前Survey模型的名称:

<h1> {{survey.name |name}} </h1>

我使用自定义模板标记/过滤器来显示该名称;然而,它显示为&#39; str&#39;而不是当前测量模型的名称。

以下是过滤器代码:

from django import template

register = template.Library()

@register.filter
def name(value):
return value.__class__.__name__

我在这里做错了什么?

3 个答案:

答案 0 :(得分:0)

当您使用<h1> {{survey.name |name}} </h1>调用模板标记时,您将向其传递与模型关联的字符串。由于该字段为CharField,它将返回一个字符串,因此该类的名称为str

我相信你想要的是<h1> {{survey|name}} </h1>,它会将模板标签发送给Survey的实例,从而从中获取类名。

答案 1 :(得分:0)

作为上述答案的补充......

您的过滤器正在调用__class__.__name__,我相信会返回str

尝试更改过滤器以返回value.__name__

See this similar question

答案 2 :(得分:0)

你可以这样做:

  • 如果您已在meta中定义了verbose_name,则可以执行以下操作:

    return(model-name)._ meta.verbose_name

  • 否则你可以这样做:

    return(型号名称)。名称