有一种简单的方法可以反转模板渲染吗?

时间:2013-07-15 19:17:48

标签: django django-templates

我可以这样做来渲染模板。

>>> from django.template import Context, Template
>>> t = Template("My name is {{ my_name }}.")
>>> c = Context({"my_name": "Adrian"})
>>> t.render(c)
u'My name is Adrian.'

现在我想获取渲染的模板,然后从中获取上下文。类似的东西:

>>> t.reverse_render('My name is Adrian.')
{"my_name": "Adrian"}

这是一个好主意吗?

更新:我想这样做的原因是因为我收到的XML具有定义良好的结构,我认为以这种方式提取数据比手动解析XML要容易得多。

我正在使用XML模板发送响应,这让我想知道我是否可以以类似但反向的方式处理请求。

2 个答案:

答案 0 :(得分:1)

据我所知,这不是Django功能。所以,不,Django没有办法。如果您有模板,则必须创建一种解析html / xml的方法,并将其与模板进行比较,以便将每个更改与每个{{context_label}}相关联。

这似乎是一个有趣的问题,但我不知道它的解决方案在标准的web应用程序中是如何有用的(因此我认为Django首先没有理由拥有此功能)。

答案 1 :(得分:0)

我找到了一种非常类似的方法,可以在没有Django模板的情况下做到这一点,这对我来说效果很好:

import re

tmpl = 'My name is (?P<name>.*).\nI like to ride my (?P<transport>.*).'
msg = 'My name is Adrian.\nI like to ride my bicycle.'
print(re.compile(tmpl).match(msg).groupdict())

输出:

{'name': 'Adrian', 'transport': 'bicycle'}

XML正则表达式模板仍然可以保存在XML文件中并在运行时读入。