Django の request.is_ajax は、JS を介してプログレッシブ エンハンスメントを追加し、DRY を維持するための非常に便利な方法だと思います。
ただし、クラスベースのビューを使用し、request.is_ajax の場合は別のテンプレートでレンダリングしたいと考えています。
デフォルトの「template_name」をオーバーライドして、クラスベースのビューでテンプレートの読み込みを条件付きにする方法がわかりません。
これどうやってするの?
Django の request.is_ajax は、JS を介してプログレッシブ エンハンスメントを追加し、DRY を維持するための非常に便利な方法だと思います。
ただし、クラスベースのビューを使用し、request.is_ajax の場合は別のテンプレートでレンダリングしたいと考えています。
デフォルトの「template_name」をオーバーライドして、クラスベースのビューでテンプレートの読み込みを条件付きにする方法がわかりません。
これどうやってするの?
get_template_names をオーバーライドします。
def get_template_names(self):
if self.request.is_ajax():
return ['ajax_template.html']
else:
return ['standard_template.html']
これを行う適切な方法は、 によって提供されるメソッドをオーバーライドすることTemplateResponseMixin
です。
Ajax リクエストに別のテンプレートを提供する必要があるだけの場合は、オーバーライドしますget_template_names
。まったく別の応答 (応答など) を提供したい場合はapplication/json
、オーバーライドして、 Ajax 要求に対してrender_to_response
別の応答を生成します。HttpResponse