代码之家  ›  专栏  ›  技术社区  ›  abahgat

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

  •  1
  • abahgat  · 技术社区  · 14 年前

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

    Author 一串 列表

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

    有没有什么方法可以有效地处理这种情况(基本上是根据字段的类型以不同的方式打印字段)?我需要依靠定制标签或其他方式吗?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Aidas Bendoraitis Rob Sanderson    14 年前

    我认为最干净的解决方案是在模型中添加一个方法 get_authors()

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

    如果由于某种原因,您只能访问模板而无法更改模型,则可以使用以下方法:

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

        2
  •  1
  •   Matthew Schinckel    14 年前

    我觉得艾达斯 get_authors() 解决方案是最好的,但另一种方法可能是创建一个执行测试的模板标记。你想继续读下去 custom template tags 但是如果你看看现有的,它们并不难创建。

        3
  •  0
  •   abahgat    14 年前

    我听从了马修的建议,最终实现了一个处理列表的过滤器。

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

    我从这样的模板页面调用它 {{ aitem.Author|fixlist }}

    谢谢你的帮助!