Skip to main content
 首页 » 编程设计

python之渲染到模板并获得响应

2025年05月04日8shangdawei

我有这样的情况,我正在从数据库中获取一些 html,它存储在变量 html 中,

{{HEADER}} </br> 
Hello {{NAME}}, </br> 
{{FOOTER}} 

如您所见,我以这种方式定义数据,以便在我将其呈现给任何模板时,变量(HEADER、FOOTER 等)可以替换为实际值。 但这并没有发生。 我制作了一个正在渲染的模板 abc.html ,这个模板的内容是 {{html}} ,当我渲染到这个模板时,它被上面的代码替换了。

我试过了——

html_content =TemplateResponse(request,"abc.html",{'html':html,'HEADER':html_header,'FOOTER':html_footer}) 
html_content.render() 

现在的问题是,在abc.html中只有html被替换成它的值,而html中定义的变量如HEADER,FOOTER并没有被替换成它的内容。

我知道这很复杂,可能不可能。

但是谁能给我一些建议,这样我就可以更改模板中的变量

请您参考如下方法:

是的,因为最终的html模板只渲染了一次。在呈现 abc.html 时,它会查找所有模板变量并替换它们。在这种情况下,只有“html”被它的值所取代。然后 html 被渲染,因为它没有找到任何其他变量或包含的 html。

如果您在另一个模板变量中传递一个模板变量,则它不会被渲染。

你可以这样做:

#abc.html 
{{HEADER}} 
{{ CONTENT }} 
{{FOOTER}} 
 
#in view 
html_content =TemplateResponse(request,"abc.html {'CONTENT':html_content,'HEADER':html_header,'FOOTER':html_footer}) 

为此,您需要更改数据库中的 html 格式。

但正如您所说,在您的情况下,除了页眉和页脚之外可能还有许多模板变量,然后您可以在将其发送以进行渲染之前更新“html”变量。

finalhtml = html.replace('{{HEADER}}',html_header).replace('{{FOOTER}}',html_footer) 
html_content =TemplateResponse(request,"abc.html {'html':finalhtml}) 

或者你可以使用:

from django.template import Context, Template 
t = Template(html) 
c = Context({'HEADER':html_header,'FOOTER':html_footer}) 
return HttpResponse(t.render(c)) 

我想这是最简洁的方法;即从字符串而不是文件加载模板。 See documentation here .