2014-09-24 84 views
0

根据答案:Can model properties be displayed in a template,我试图让属性,它可以在模板显示:财产上的模板无效

class MyClass(models.Model): 
    first_name = models.CharField(max_length = 10) 
    last_name = models.CharField(max_length = 10) 

    def __unicode__(self): 
    return "%s %s" % (self.first_name, self.last_name) 

    @property 
    def initials(self): 
    return "%s.%s." % (self.first_name[0:1], self.last_name[0:1]) 

也试过:

def _get_initials(self): 
    return "%s.%s." % (self.first_name[0:1], self.last_name[0:1]) 

initials = self._get_initials() 

和模板:

{% for i in people %} 
    {{ i.initials }} 
{% endfor %} 

但结果是空字符串

我更改模板:

{% for i in people: %} 
    {{ i.instance.initials }} 
{% endfor %} 

,但仍然空字符串。

如果我使用:

{% for i in people: %} 
    {{ i }} 
{% endfor %} 

我得到的Unicode结果,因此模型,形式和模板是正确的

请不要专注于解决问题的缩写,因为我需要将财产用于更复杂的任务 - 这仅仅是一个例子。

更新

我添加@财产,因为它并没有,所以我一直在寻找解决方案的工作...

+0

此问题与属性无关。你为什么要给“人”添加冒号?这将导致变量不被发现,所以没有什么可以迭代。 – 2014-09-24 11:21:10

+0

冒号是错字。在我的应用程序当然没有冒号。那么,我不知道我是否必须使用财产或没有财产,它也不起作用,所以我GOOGLE了,并发现建议使用财产(问题顶部的链接) – 2014-09-24 11:28:13

+2

然后,代码没有问题你已经展示过。你确定'i'是你想象的吗,即'MyClass'对象的列表或查询集?自从添加该方法后,您是否重新启动了服务器? – 2014-09-24 11:37:52

回答

0

嗯......丹尼尔罗斯曼非常感谢指着我。是不需要的属性,则该实例也:正确的答案是:

class MyClass(models.Model): 
    first_name = models.CharField(max_length = 10) 
    last_name = models.CharField(max_length = 10) 

    def __unicode__(self): 
    return "%s %s" % (self.first_name, self.last_name) 

    def initials(self): 
    return "%s.%s." % (self.first_name[0:1], self.last_name[0:1]) 

也试过:

和模板:

{% for i in people %} 
    {{ i.initials }} 
{% endfor %} 

我的问题是definetely别的地方 - 我需要的功能使名称md5hash:

def hashed(self): 
    hashed = md5.new("%s" % self.first_name).digest() 
    return "%s md5(%s)" % (self.first_name, hashed) 

但有一个错误 - 它必须是hexdigest()n ot digest()。但最大的困惑是,即使有这个错误,我期望看到Smith md5(),而不是Smith md5(skljhghwgohwgio2534),但我什么都看不到....什么误导我,这个问题是功能和模板不返回值...

这是对我来说一个教训 - 小步骤,如果有什么不起作用,请检查更简单的情况...