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

时间:2010-10-23 00:15:25

标签: python django google-app-engine django-templates

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

但是,

Author可以是字符串列表对象,我无法提前告知它。当作者是一个列表并且我尝试在我的模板上打印它时,我得到了

的丑陋结果
  

作者: [u'J。 K.罗琳',u'Mary GrandPr \ xe9']

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

3 个答案:

答案 0 :(得分:6)

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

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

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

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

P.S。使用大写字母表示属性名称不是一个好习惯。

答案 1 :(得分:1)

我认为Aidas的get_authors()解决方案是最好的,但另一种方法可能是创建一个进行测试的模板标签。您需要阅读custom template tags,但如果查看现有文件,则不难创建。

答案 2 :(得分:0)

我遵循了Matthew的建议并最终实现了一个过滤器来处理列表。 我在这里张贴它以防万一其他人需要它。

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

我从模板页面调用它,例如{{ aitem.Author|fixlist }}

感谢您的帮助!