Python 渲染到模板并获取响应
我有这样一种情况,我从数据库中获取一些html,就像这样,它存储在一个变量html中Python 渲染到模板并获取响应,python,django,django-templates,rendering,Python,Django,Django Templates,Rendering,我有这样一种情况,我从数据库中获取一些html,就像这样,它存储在一个变量html中 {{HEADER}} </br> Hello {{NAME}}, </br> {{FOOTER}} 现在的问题是,在abc.html中,只有html被其值替换,但是html中定义的变量(如页眉、页脚)不会被其内容替换 我知道这很复杂,可能不可能 但是有谁能给我一些建议,这样我就可以更改模板中的变量了吗?是的,这是因为最终的html模板只呈现一次。在呈现abc.html时,它会查找所有模
{{HEADER}} </br>
Hello {{NAME}}, </br>
{{FOOTER}}
现在的问题是,在abc.html中,只有html被其值替换,但是html中定义的变量(如页眉、页脚)不会被其内容替换
我知道这很复杂,可能不可能
但是有谁能给我一些建议,这样我就可以更改模板中的变量了吗?是的,这是因为最终的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))
我想这是最干净的方法;i、 e.从字符串而不是文件加载模板 您是否尝试将html变量标记为安全的?您的html变量包含此值?{{HEADER}}你好{{NAME},{{{FOOTER}}}@matino不,我没有试过this@Sudipta是的。当我呈现到abc.html时,{{html}}替换为there值,但是页眉页脚不需要回复,您建议的方式对我不起作用,因为在html中,我可以定义更多的变量,而不仅仅是页眉和页脚。Ok。然后在发送用于呈现的“html”变量之前使用replace()函数
finalhtml=html.replace({{HEADER}',html_HEADER.replace({{FOOTER}}',html_FOOTER)
我也在考虑使用相同的方法thing@Inforian您可以直接从字符串而不是html文件加载模板。我已经在编辑中添加了解决方案。
from django.template import Context, Template
t = Template(html)
c = Context({'HEADER':html_header,'FOOTER':html_footer})
return HttpResponse(t.render(c))