如何从python字符串扩展django模板

Tre*_*vor 3 python django django-templates

我有一个看起来像的字符串

string '''
    <html>
        <head>
            {% block head %}{% endblock %}
            ... other stuff ...
        </head>
        <body>
            {% block body %}{% endblock %}
           ... other stuff ...
        </body>
    </html>
'''
Run Code Online (Sandbox Code Playgroud)

我想以下django模板继承上面的字符串:

{% block head %}
    ... other stuff ...
{% endblock %}

{% block body %}
    <h1>Other stuff</h1>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

由于字符串不在文件中,因此不能仅将其文件名指定给模板呈现引擎.有任何想法吗?

Set*_*eth 6

为了实现仅字符串模板扩展器,您可能必须实现模板加载器.实际上,更清洁的解决方案是使用下面的threed建议.Template()在上下文中传递父级而不是磁盘模板的名称:

>>> from django.template import Context, Template
>>> extend_me = Template("Before A. {% block a %}{% endblock %}. After A")
>>> str_template = "{% extends parent %} {% block a %}This is inside A{% endblock %}"
>>> Template(str_template).render(Context({"parent": extend_me}))
u'Before A. This is inside A. After A'
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎不适用于django 1.3,可能是由于bug#7377(你不能在字符串模板中使用extendsblock标签).虽然它在1.2中运行良好.所以如果你碰巧运行1.3,你可以查看这个问题的历史并使用我的黑客:)


扩展模板标签允许你指定一个变量名(自1.0版).

在这个问题中有一个例子:如何使用Django的模板扩展变量?