是否可以加载带有模板标记值的字典并加载这些标记的上下文?

2024-06-16 10:12:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我实际上是在尝试两次加载上下文,以便在第二次将上下文注入模板时,第一次加载上下文时将注入模板标记。有人知道解决这个问题的最佳方法吗

我试着用一个inclusion_标签来做这个,但它仍然不起作用。我也尝试过使用json文件,但我希望避免一直解析整个json文件,我希望使用python字典来完成

理想情况下,我想先将这个字典加载到模板中

LAYOUT = {
 LAYOUT_ONE: {
   "header": "Hello, {{ user.name }} />",
   "description": "This is the description of {{ obj.note }}"
 }
}

template.html:

{% load tags %}
{% get_data label %}
<h1>{{ header }}</h1>
<p>{{ description }}</p>

然后加载此附加上下文:

{
 "user": {
   "name": "John"
  },
 "obj": {
   "note": "test test"
  }
}

正如Django文档中建议的那样,我尝试了两种方法来使用inclusion_标记:

tags.py

def get_data(label):
    return LAYOUT[label]


register.inclusion_tag("template.html")(get_data)

以及:

def get_html_template(label):
    register = template.Library()
    template = loader.get_template("template.html")
    register.inclusion_tag(template)(get_data)
    return email_template

我会这样称呼它:

get_html_template(LAYOUT_ONE).render({
 "user": {
   "name": "John"
  },
 "obj": {
   "note": "test test"
  }
})

但上下文似乎没有通过。我认为我可能错误地使用了inclusion_标记,因为我不确定Django如何知道“label”参数是什么,以及在使用“get_data”时该参数来自何处

我也尝试过使用Template(),但我遇到了一个错误,因为我使用了多个引擎,而指定一个引擎只会给我带来另一个奇怪的错误,如果这是解决方法,我可以进一步研究该路径


Tags: 方法name标记test模板objdataget