0

django 中是否有任何模板标签或解决方法可以ast.literal_eval(some_str)在模板中制作?

我应该创建一个新的模板标签来做到这一点吗?在这种情况下,该模板标签将如何?

我问的原因可以在这里找到如何反序列化python打印的字典?

4

1 回答 1

4

为什么会有这样一个特定的标签,为什么会使用它?

您可以轻松添加一个

# file: literal_eval.py

import ast

def literal_eval(value):
    return ast.literal_eval(value)

from django import template
register = template.Library()
register.filter('literal_eval', literal_eval)

你可以在模板中这样使用它

{% load literal_eval %}

{{ some_str|literal_eval }}

现在这导致了“为什么?”的问题。你会用这个做什么?

编辑:OP说“他想反序列化一些保存为varchar的python dict”,在这种情况下模板不是这样做的地方,首先将文本转换为dict,然后将其传递给模板。

最好还是重新考虑正在做的事情,保存字典repr不是序列化的方法,使用literal_eval不是反序列化字典的方法,使用json.dumps或这种格式将字典放入数据库并用于json.loads将其转换回字典。你也可以用泡菜,但我不推荐它。

于 2012-10-31T18:55:04.003 回答