gpt4 book ai didi

python - Django解析模板提取变量

转载 作者:太空狗 更新时间:2023-10-30 02:43:34 26 4
gpt4 key购买 nike

情况:

我正在使用 Django 模板编写自定义平面文件,但我希望能够使用相同的 Django 模板来提取由 Django 模板生成的任何数据。

这是模板文件 test.conf 的示例。

object User "{{ user }}" {

display_name = "{{first_name}} {{last_name}}"
groups = [ "{{ group_name }}" ]
email = "{{ email }}" }

这是生成的输出。

object User "test1" {
display_name = "test2"
groups = [ "test3" ]
email = "test4" }

我希望能够使用“test.conf”Django 模板从平面文件中提取数据“test1、test2、test3、test4”。这可能吗,还是我需要使用 re 来解析这些数据?

编辑:此代码片段有效。如果您使用 open("file", 'r') 打开模板文件,它会将转义码添加到字符串中。您只需要为 [ 添加正则表达式转义标志,例如\\[。感谢您的帮助。

最佳答案

据我所知没有反向解析API,所以我认为你的想法是不可能的。

但是,您仍然可以使用模板生成正则表达式来提取关键字,方法如下:

from django.template import Template, Context
import re

template_source = """
object User "{{ user }}" {

display_name = "{{first_name}} {{last_name}}"
groups = [ "{{ group_name }}" ]
email = "{{ email }}" }
"""

# re.escape will add backslashes to all non-alphanumeric characters
template_source = re.escape(template_source)
# but we need to fix all escaped {{ and }} characters
template_source = template_source.replace('\{\{', '{{')
template_source = template_source.replace('\}\}', '{{')

# (you will also need to do this for the tag delimiters {% %} and for
# any symbols inside your template tags)

t = Template(template_source)
c = Context({
"user": "(?P<user>.*?)",
"first_name" :"(?P<first_name>.*?)",
# (there's probably an easier way to do this for all the parameters)
...
})

regex_string = t.render(c)

# regex_string will look like this:
# (actually way uglier since re.escape will also escape whitespace!)
"""
object User \"(?P<user>.*?)\" \{

display_name \= \"(?P<first_name.*?) (?P<last_name.*?)\"
groups \= ...
"""

regex = re.compile(regex_string, re.MULTILINE)

关于python - Django解析模板提取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32951848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com