遍历字符串和列表的 Python/Django 模板
Posted
技术标签:
【中文标题】遍历字符串和列表的 Python/Django 模板【英文标题】:Python/Django Template Iterating through Strings and Lists 【发布时间】:2013-06-22 22:33:04 【问题描述】:我有一个 Python/Django 问题,我将一个字符串或一个字符串列表传递给模板。如果它是一个列表,我需要遍历它并在单独的行上输出每个字符串,如果它是一个字符串,我只需要输出字符串。我需要能够区分值类型并进行相应调整。
目前我有与此类似的代码:
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。
我们将不胜感激任何帮助/建设性的批评。
【问题讨论】:
是什么让你说不建议使用isinstance
?
"我有一个字符串或字符串列表被传递给一个模板。"我preeeetty确定这在某处违反了某些编程原则;我就是不能一下子记住所有的名字。
告诉我们你在哪里使用它,也许你需要一个好的重构。
karthikr:我可能应该换一种说法。我编辑了帖子。伊格纳西奥:是的,你是对的。不幸的是,问题源于解析的 JSON 对象列表,我无法控制其中的内容。 lalo:有关更多上下文,您可以查看此处:pastebin.com/JK2PRrWv。感谢您的反馈!
您应该可以控制为您提供已解析 json 的视图代码,对吧?你应该可以修改它。
【参考方案1】:
isinstance 可能是您想要区分字符串和另一个可迭代对象的内容,但您应该与 basestring(所有字符串都派生自它)进行比较,而不是 list。见this问答。
if isinstance(values, basestring):
html += values + "<br />"
else:
for value in values:
html += value + "<br />"
【讨论】:
谢谢!我之前确实看过这个问题,但事实证明我应该更仔细地阅读它。以上是关于遍历字符串和列表的 Python/Django 模板的主要内容,如果未能解决你的问题,请参考以下文章
python django 怎么把数据查询结果保存到一个list里面
python django models.Model 遍历所有字段