我正在使用Django模板在Google AppEngine上开发一个项目,因此我必须使用{{ aitem.Author }}
之类的标签在我的HTML模板中打印内容。
Author
可以是字符串或列表对象,我无法提前告知它。当作者是一个列表并且我尝试在我的模板上打印它时,我得到了
作者: [u'J。 K.罗琳',u'Mary GrandPr \ xe9']
有效处理这种情况(基本上根据其类型打印字段)有什么办法吗?我是否必须依赖自定义标签或任何其他方式?
答案 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 }}
感谢您的帮助!