如何显示包含Django模板变量的字符串?

4 投票
2 回答
4100 浏览
提问于 2025-04-17 06:25

假设我有一个字符串变量叫做 *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)

撰写回答