2014-09-24 81 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),但我什麼都看不到....什麼誤導我,這個問題是功能和模板不返回值...

這是對我來說一個教訓 - 小步驟,如果有什麼不起作用,請檢查更簡單的情況...