django在视图中添加{%extends%}标记

时间:2012-09-11 07:42:24

标签: django django-templates django-views

我需要在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()

但它不起作用。更多 - 我想保存所有传递给模板的变量。

2 个答案:

答案 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问题以获取更多帮助。