我有一个模特:
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__
我在这里做错了什么?
答案 0 :(得分:0)
当您使用<h1> {{survey.name |name}} </h1>
调用模板标记时,您将向其传递与模型关联的字符串。由于该字段为CharField
,它将返回一个字符串,因此该类的名称为str
。
我相信你想要的是<h1> {{survey|name}} </h1>
,它会将模板标签发送给Survey
的实例,从而从中获取类名。
答案 1 :(得分:0)
作为上述答案的补充......
您的过滤器正在调用__class__.__name__
,我相信会返回str
尝试更改过滤器以返回value.__name__
答案 2 :(得分:0)
你可以这样做:
如果您已在meta中定义了verbose_name,则可以执行以下操作:
return(model-name)._ meta.verbose_name
否则你可以这样做:
return(型号名称)。名称