このようなクラスベースのビューがある場合、
_class SomeView (View):
response_template='some_template.html'
var1 = 0
var2 = 1
def get(self, request, *args, **kwargs):
return render_to_response(self.response_template, locals(), context_instance=RequestContext(request))
_
私の質問は、テンプレート_some_template.html
_内で_var1
_および_var2
_にアクセスするにはどうすればよいですか?私がこれを理解している限り、locals()
は、すべてのローカル変数をテンプレートにダンプするだけで、これまでのところ非常にうまく機能しています。しかし、これらの他の変数は技術的に「ローカル」ではなく、クラスの一部なので、どのように渡すのですか?
ありがとう!
_self.var1
_および_self.var2
_をget
メソッドのコンテキストに追加します。
_class SomeView (View):
response_template='some_template.html'
var1 = 0
var2 = 1
def get(self, request, *args, **kwargs):
context = locals()
context['var1'] = self.var1
context['var2'] = self.var2
return render_to_response(self.response_template, context, context_instance=RequestContext(request))
_
また、テンプレートへのコンテキストとしてlocals()
を渡すのが良い方法であるかどうかはわかりません。テンプレートに渡されるデータを明示的に構築することを好む=テンプレートで本当に必要なものだけを渡す。
お役に立てば幸いです。
これを行うよりクリーンな方法は、Djangoのテンプレートビューを複製することです。
class TemplateView(TemplateResponseMixin, ContextMixin, View):
"""
A view that renders a template. This view will also pass into the context
any keyword arguments passed by the url conf.
"""
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
return self.render_to_response(context)
次に、それをget_context_data関数に追加します。または、テンプレート名を指定できるTemplateViewを使用して、get_context_data関数をオーバーライドすることもできます。
class SomeView(generic.TemplateView):
var1 = 0
var2 = 1
template_name = 'some_template.html'
def get_context_data(self, **kwargs):
context = super(SomeView, self).get_context_data(**kwargs)
context.update({'var1': self.var1, 'var2': self.var2})
return context
[〜#〜]編集[〜#〜]
Djangoにはさまざまな用途に使用できる汎用ビューがあります。それらの完全なリストについては docs を参照することを強くお勧めします。これらの汎用ビューには、カスタムを実行するためにオーバーライドできる関数がありますデフォルトではサポートされていないもの。あなたのケースでは、コンテキスト変数を含むテンプレートが欲しかったので、TemplateViewをサブクラス化してtemplate_nameを提供し、最後にget_context_data関数をオーバーライドしてコンテキストデータを追加できます。あなたのケースで必要なのはコードのすべてです。
関数内でクラスラベル変数を渡すには、新しく作成されたオブジェクトとして参照するself
で参照する必要があります。クラス内の変数にアクセスすることは知っているので、そのオブジェクトを参照する必要があります。それ以外の場合は、グローバル名「あなたの変数」が定義されていないことがキャッチされます
あなたの場合の例として、あなたはそれを次のようにすることができます
class YourView(genericView):
template_name='your_template.html'
var1 = 12
var2 =1
def get(self, **kwargs):
context = locals()
context['var1'] = self.var1
context['var2'] = self.var2
return context