我需要在views.py中添加TemplateView html {%extends some_base.html%}的输出。 我无法直接使用html,因为template_name将始终不同,我不想将{%extends ..%}添加到每个template.html文件中。 我想做这样的事情:
class PageView(TemplateView):
def get_context_data(self, **kwargs):
object = PageModel.objects.get(view_base__slug=kwargs.get('slug'))
self.template_name = object.template_name
self.base='base.html'
from django.template.loader import render_to_string
#just example, it's not working
rendered = render_to_string(self.template_name)
rendered= '{% extends' + self.base + '%} '+ rendered
###
return locals()
但它不起作用。更多 - 我想保存所有传递给模板的变量。
答案 0 :(得分:1)
我不确定你为什么要尝试,但你不能把{%extends ...%}
放在HTML中(除非你想用django模板再次渲染它。渲染后将该字符串添加到模板中会添加不需要的{{1}模板中的字符串。
但如果您愿意,可以动态创建模板并进行渲染。新模板可以扩展现有模板。 例如:
{%extends ...%}
更多参考资料:Template Compiling a string
答案 1 :(得分:0)
通过将变量template_name
传递给模板,您可以在django模板中实现相同的功能。然后在模板中将此代码放在最顶层。
{% with template_name|add:".html" as template %}
{% include template %}
{% endwith %}
或查看this问题以获取更多帮助。