當您直接在對象上切片時,Django從不會調用__unicode__
,而是直接將該對象傳遞給過濾器。這是應該發生的實際行爲。當你在你的模板中做{{ some_object }}
時,Django只會自動奇蹟地呼叫__unicode__
,因爲它需要打印出。
你最好的選擇將是一個方法添加到您的模型,以提供一個縮短的名稱,然後使用該方法在你的模板:
def MyModel(models.Model):
...
def get_short_content_title(self):
return unicode(self.content_object)[:20]
而且在你的模板:
{{ list_object.get_short_content_title }}
或者從技術上說,您只需代理__unicode__
電話,然後在模板中處理它即可:
def MyModel(models.Model):
def get_content_title(self):
return unicode(self.content_object)
而且在你的模板:
{{ list_object.get_content_title|slice:":20" }}
無論在方案中效果最好。
實際上多了一個替代方案是創建一個簡單的模板過濾器返回對象的Unicode值:
@register.filter
def get_unicode(obj):
return unicode(obj)
然後,在你的模板:
{{ list_object.content_object|get_unicode|slice:":20" }}
你不愛選擇? ;)
非常感謝這麼多的選擇!最後一個似乎是最通用的。這樣我就不必爲我的所有模型添加一個方法,我不知道Django自動傳遞該對象。 – Sachin