如何显示包含Django模板变量的字符串?
假设我有一个字符串变量叫做 *magic_string*,它的值是 "这个产品的名称是 {{ product.name }}",并且这个变量可以在 Django 模板中使用。有没有可能把这个变量解析成 "这个产品的名称是 Samsung GT-8500" 呢?(假设产品的名称是 "GT-8500",而变量 {{ product.name }} 也可以在同一个模板中使用)?
我试着做了一些类似的事情,但没有成功(老实说,我也不意外):
{{ magic_string|safe }}
有没有什么想法或建议来解决我的问题?
2 个回答
6
也许我没有理解你的问题,不过你考虑过这个吗,
from django.template import Context, Template
>>> t = Template("This product name is {{ product.name }}")
>>> c = Context({"product.name": " Samsung GT-8500"})
>>> t.render(c)
祝好。
7
写一个自定义的模板标签,并将那个变量作为模板来渲染。比如,你可以看看“ssi”标签是怎么写的。
另外,你能在你的视图中渲染这个字符串吗?无论如何,这里有一个未经测试的版本的那个标签:
@register.tag
def render_string(parser, token):
bits = token.contents.split()
if len(bits) != 2:
raise TemplateSyntaxError("...")
return RenderStringNode(bits[1])
class RenderStringNode(Node):
def __init__(self, varname):
self.varname = varname
def render(self, context):
var = context.get(self.varname, "")
return Template(var).render(context)