Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 渲染到模板并获取响应_Python_Django_Django Templates_Rendering - Fatal编程技术网

Python 渲染到模板并获取响应

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时,它会查找所有模

我有这样一种情况,我从数据库中获取一些html,就像这样,它存储在一个变量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))