3

Django アプリケーションの任意の他のテンプレートに直接提供することも、埋め込むこともできるようにしたいテンプレートがあります。次のようなビュークラスを作成しようとしました:

class TemplateView(View):
    def get(self, request):
        context = self._create_context(request)
        return render_to_response('template.html', context)

    def get_string(self, request):
        context = self._create_context(request)
        return render_to_string('template.html', context)

    def _create_context(self, request):
        context = {}
        # Complex context initialization logic...
        return context

getDjango の URL に配線しました。ただし、他のビューからTemplateView呼び出すことができるようにインスタンス化する方法を理解できませんでした。get_string

これを行うためのより良い方法があるはずです。アイデア?

更新:内部でリクエストを作成して を使用することについて話している人を見たことがあります。これにより、メソッドresponse.contentを作成する必要がなくなります。したがって、おそらくより適切な質問は次のとおりです。別のビューからget_stringのリクエストを行うにはどうすればよいですか?TemplateView

4

1 に答える 1

3

私は django の CBV パターンに従いますdispatch。どのメソッドを介して返すかを決定します。デフォルトでは、 に基づいていrequest.methodます。に渡された他の引数に基づいていないのはなぜdispatch()ですか?

したがって、ディスパッチをサブクラス化し、返すかどうかを決定する方法を提供しget_stringます。

def dispatch(self, request, *args, **kwargs):
    if 'as_string' in kwargs:
         return self.get_string(request)        
    return super(TemplateView, self).dispatch(request, *args, **kwargs)

response = TemplateView.as_view()(request, as_string=True)
于 2012-12-06T04:53:25.073 に答える