我可以这样做来渲染模板。
>>> 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模板发送响应,这让我想知道我是否可以以类似但反向的方式处理请求。
答案 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文件中并在运行时读入。