Python / Django模板迭代字符串和列表

时间:2013-06-25 23:04:05

标签: python django django-templates

我在使用Python / Django时遇到问题,我将字符串或字符串列表传递给模板。如果它是一个列表,我需要迭代它并在一个单独的行上输出每个String,如果它是一个String我只需要输出字符串。我需要能够区分值类型并相应地进行调整。

目前我的代码与此类似:

if isinstance(values, list):
    for value in values:
        html += value + "<br />"
else:
    html += values + "<br />"

我的问题有两个:

首先,我正在寻找一种更好/更多的pythonic方式(如果可能的话),这样做会有相同的结果。我知道在某些情况下isinstance方法不是理想的解决方案,但是我能够利用hasattr这样的方法吗?它会在效率方面有所改进吗?

其次,理想情况下我希望使用Django模板语言实现它。如果我继续使用isinstance或更改为hasattr,我必须制作自定义模板过滤器或标记才能传递正确的参数。我应该忘记模板,只是编写一个在视图中生成HTML的代码(不好的做法),或者其中一个的答案是否适合我的情况? (Performing a getattr() style lookup in a django templatedjango template system, calling a function inside a model

目前的模板代码可在此处找到:http://pastebin.com/JK2PRrWv

背景

我目前正在研究一些Python(Django)代码,它实现了一个用于处理查询的简单REST / Json API。其中一个要求是将Python字典列表(从JSON解析)转换为非常简单的HTML表。为了实现这个功能,我使用了一个Django模板,该模板获取Python字典列表并从中生成HTML。

非常感谢任何帮助/建设性批评。

1 个答案:

答案 0 :(得分:0)

isinstance可能是你想要区分字符串和另一个iterable,但是你应该与basestring(从中派生所有字符串)而不是list进行比较。请参阅this问题和答案。

if isinstance(values, basestring):
    html += values + "<br />"
else:
    for value in values:
        html += value + "<br />"