遍历字符串和列表的 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 遍历所有字段

Python:遍历字符串和列表

使用 Python/Django 在循环中使用 if 语句检查列表

Django模板遍历字典的方法

C#循环遍历列表以查找字符数