【问题标题】:How to display string which contains django template variables?如何显示包含 django 模板变量的字符串?
【发布时间】:2023-03-14 04:02:01
【问题描述】:

假设我有一个名为 *magic_string* 的字符串变量,其值设置为“此产品名称为 {{ product.name }}”,并且可在 django 模板中使用。是否有可能解析该变量以向我显示“此产品名称是三星 GT-8500”(假设产品名称是“GT-8500”和变量 {{ product.name }} 在同一个模板中可用)?

我试图做这样的事情,但它不起作用(老实说?我并不感到惊讶):

{{ magic_string|safe }}

对我的问题有什么想法/建议吗?

【问题讨论】:

    标签: python django string django-templates


    【解决方案1】:

    编写自定义模板标签并将该变量呈现为模板。 比如看看"ssi" tag is written.

    另一方面,你能在你的视图中渲染这个字符串吗?无论如何,这是该标签的未经测试的版本:

    @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)
    

    【讨论】:

    • 像魅力一样工作。谢谢 !很抱歉没有投票,但我需要更多的声誉才能做到这一点:(
    • 如果你想使用上下文变量的属性(例如person.name),在顶部夹住from django.template.base import resolve_variable,然后将倒数第二行改为var = resolve_variable(self.varname, context)
    【解决方案2】:

    也许我不明白你的问题,但是呢,

    from django.template import Context, Template
    >>> t = Template("This product name is {{ product.name }}")
    
    >>> c = Context({"product.name": " Samsung GT-8500"})
    >>> t.render(c)
    

    问候。

    【讨论】:

    • 所以我们是平等的,因为我不明白答案:) 但无论如何感谢分享!
    猜你喜欢
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 2012-01-11
    • 2016-01-13
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多