在Django中,有一种简单的方法可以在模板中将文本字段作为模板进行渲染吗?

Pie*_*ert 3 tags django templates filter

您能想到在模板渲染过程中将文本字段评估为模板的简单方法吗?

我知道如何在视图中执行此操作,但我正在寻找模板过滤器或标签?

就像是:

{{ object.textfield|evaluate}} 要么 {% evaluate object.textfield %}

with object.textfield包含以下内容:

a text with a {% TemplateTag %}.

TemplateTag由于evaluate过滤器,将在其中评估.

Pie*_*ert 12

这是第一个解决我的问题的Tag实现:

from django import template

register = template.Library()

@register.tag(name="evaluate")
def do_evaluate(parser, token):
    """
    tag usage {% evaluate object.textfield %}
    """
    try:
        tag_name, variable = token.split_contents()
    except ValueError:
        raise template.TemplateSyntaxError, "%r tag requires a single argument" % token.contents.split()[0]
    return EvaluateNode(variable)

class EvaluateNode(template.Node):
    def __init__(self, variable):
        self.variable = template.Variable(variable)

    def render(self, context):
        try:
            content = self.variable.resolve(context)
            t = template.Template(content)
            return t.render(context)
        except template.VariableDoesNotExist, template.TemplateSyntaxError:
            return 'Error rendering', self.variable
Run Code Online (Sandbox Code Playgroud)