0

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

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

4

2 回答 2

1

我不确定你为什么要尝试但你不能放入{%extends ...%}HTML(除非你想使用 django 模板再次渲染它。在渲染后将该字符串添加到模板中会{%extends ...%}在模板中添加不需要的字符串。

但是,如果您愿意,您可以动态创建模板并渲染它。新模板可以扩展现有模板。例如:

>>> from django.template import Template, Context
>>> #creates a template from string, "base.html" can be self.base in your case
>>> t = Template('{%extends "' + "base.html" + '"%} ...') 
>>> c = Context({'your_var1': 'var1_value'})            #get context for template
>>> t.render(c)                                         #render the created template 
u'\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n
 <html xmlns="http://www.w3.org/1999/xhtml">
....

更多参考:模板编译字符串

于 2012-09-11T08:35:04.287 回答
0

通过将变量传递template_name给模板,您可以在 django 模板中实现相同的目的。然后在模板中把这段代码放在最上面。

{% with template_name|add:".html" as template %}
{% include template %}
{% endwith %}

或查看问题以获得更多帮助。

于 2012-09-11T08:19:12.553 回答