我在使用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 template或django template system, calling a function inside a model)
目前的模板代码可在此处找到:http://pastebin.com/JK2PRrWv
我目前正在研究一些Python(Django)代码,它实现了一个用于处理查询的简单REST / Json API。其中一个要求是将Python字典列表(从JSON解析)转换为非常简单的HTML表。为了实现这个功能,我使用了一个Django模板,该模板获取Python字典列表并从中生成HTML。
非常感谢任何帮助/建设性批评。
答案 0 :(得分:0)
isinstance可能是你想要区分字符串和另一个iterable,但是你应该与basestring(从中派生所有字符串)而不是list进行比较。请参阅this问题和答案。
if isinstance(values, basestring):
html += values + "<br />"
else:
for value in values:
html += value + "<br />"