如何区分django模板中的列表和字符串

aba*_*gat 1 python django google-app-engine django-templates

我正在使用Django模板在Google AppEngine上开发一个项目,所以我必须使用标签{{ aitem.Author }}来打印我的HTML模板中的内容.

Author但是,可以是字符串列表对象,我无法事先告诉它.当作者是一个列表并且我尝试在我的模板上打印它时,我得到了丑陋的结果

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

有没有办法处理这种情况(基本上根据其类型打印一个字段)?我是否必须依赖自定义标签或任何其他方式?

Aid*_*tis 6

我认为最干净的解决方案是向模型添加一个方法,该方法get_authors()总是返回一个或多个作者的列表.然后你可以使用:

Author: {{ aitem.get_authors|join:", " }}
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因你只能访问模板并且无法更改模型,那么你可以使用这样的hack:

{% if "[" == aitem.Author|pprint|slice:":1" %}
    Author: {{ aitem.Author|join:", " }}
{% else %}
    Author: {{ aitem.Author }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

PS对于属性名称使用大写字母不是一个好习惯.

  • 而不是`pprint`,检查特定类型的方法是不是更好?例如`if author.islower`仅在字符串时计算true. (2认同)