0

我有一个模型:

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

def __str__(self):
    return self.name

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

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

我正在使用自定义模板标签/过滤器来显示该名称;但是,它显示为“str”而不是当前调查模型的名称。

这是过滤器代码:

from django import template

register = template.Library()

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

我在这里做错了什么?

4

3 回答 3

0

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

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

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

看到这个类似的问题

于 2018-01-28T20:39:08.813 回答
0

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

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

于 2018-01-10T00:16:23.720 回答
0

你可以这样做:

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

    return (model-name)._meta.verbose_name

  • 否则你可以这样做:

    返回(型号名称)。姓名

于 2018-05-22T12:09:14.157 回答