0

私はviews.pyのTemplateViewhtml{%extends some_base.html%}の出力に追加する必要があります。htmlを直接操作することはできません。なぜなら、template_nameは常に異なり、各template.htmlファイルに{%extends ..%}を追加したくないからです。私はこのようなことをしたい:

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

テンプレートに変数を渡すことで、djangoテンプレートで実現できるのと同じですtemplate_name。次に、テンプレートでこのコードを一番上に配置します。

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

または、この質問を参照してください。

于 2012-09-11T08:19:12.553 に答える