2

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

目前我有与此类似的代码:

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

我的问题是双重的:

首先,我正在寻找一种更好/更pythonic的方式(如果可能的话)来做到这一点,这将产生相同的结果。我知道在某些情况下,该isinstance方法不是一个理想的解决方案,但是我可以使用类似hasattr的方法吗?它会提高效率吗?

其次,理想情况下,我希望使用 Django 模板语言来实现这一点。如果我继续使用isinstance或更改为,hasattr我将不得不制作自定义模板过滤器或标签才能传递正确的参数。我应该忘记模板并只编写在视图中生成 HTML 的代码(不好的做法),还是其中一个的答案是适合我情况的最佳方法?(在 django 模板或django 模板系统中执行 getattr() 样式查找,在模型中调用函数

当前模板代码可以在这里找到:http: //pastebin.com/JK2PRrWv

背景:

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

任何帮助/建设性的批评将不胜感激。

4

1 回答 1

0

isinstance 可能是您想要区分字符串和另一个可迭代对象的内容,但您应该与 basestring(所有字符串都从中派生)而不是 list 进行比较。请参阅问题和答案。

if isinstance(values, basestring):
    html += values + "<br />"
else:
    for value in values:
        html += value + "<br />"
于 2013-06-26T21:10:02.527 回答