簡體   English   中英

如何在Django模板中區分列表和字符串

[英]How can I distinguish lists from strings in django templates

我正在使用Django模板在Google AppEngine上開發一個項目,因此必須使用{{ aitem.Author }}類的標簽在HTML模板中打印內容。

但是Author可以是字符串 ,也可以是列表對象,我無法提前告知。 當作者是一個列表,我嘗試將其打印在模板上時,我得到了丑陋的結果

作者: [u'JK羅琳',u'Mary GrandPr \\ xe9']

有什么方法可以有效地處理這種情況(基本上根據字段的類型打印字段)? 我是否必須依靠自定義標簽或任何其他方式?

我認為最干凈的解決方案是向模型get_authors()添加一個方法,該方法始終返回一個或多個作者的列表。 然后,您可以使用:

Author: {{ aitem.get_authors|join:", " }}

如果由於某種原因您只能訪問模板而不能更改模型,則可以使用如下方法:

{% if "[" == aitem.Author|pprint|slice:":1" %}
    Author: {{ aitem.Author|join:", " }}
{% else %}
    Author: {{ aitem.Author }}
{% endif %}

PS:使用大寫字母表示屬性名稱不是一個好習慣。

我認為Aidas的get_authors()解決方案是最好的,但是另一種方法可能是創建一個進行測試的模板標簽。 您將需要閱讀自定義模板標簽 ,但是如果您查看現有模板標簽 ,創建它們並不難。

我聽從了Matthew的建議,最終實現了一個過濾器來處理列表。 我將其發布在這里,以防萬一其他人需要它。

@register.filter(name='fixlist')
def fixlist(author):
    if type(author) == list:
        return ', '.join(author)
    else:
        return author

我從{{ aitem.Author|fixlist }}這樣的模板頁面中調用它

感謝您的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM