私は現在、通常のリクエストと同じURLを介したajaxリクエストを介してすべてのビューにアクセスできる、かなり大きなプロジェクトに取り組んでいます。これを非常に一般的な方法で処理するための小さなフレームワークを作成する方法についてのアイデアを探しています。ビューが ajax 経由で呼び出されるかどうかに応じて、別のテンプレートをレンダリングし、HttpResponse
オブジェクトではなく json を返す必要があります。このトピックに関するアイデアを集めたいと思います。主な目標は、無味乾燥な原則を回避せず、できるだけ再利用可能なコードを作成することです。一般的なビュー、ビューのデコレータなど、さまざまなオプションを既に検討していましたが、何でも受け入れます。ですから、あなたの提案を聞くか、あなたが知っている既製のスニペットを教えてください!
4596 次
2 に答える
6
この記事は、ajaxと通常のリクエストの両方を処理する方法についての非常に優れたチュートリアルのようです。request
オブジェクトには、を検索するメソッドがis_ajax()
ありますHTTP_X_REQUESTED_WITH: XMLHttpRequest
。もちろん、これは、リクエストを送信するjavascriptによって正しく設定されているこれらの値に依存します。
記事から:
from django.http import HttpResponse
from django.core import serializers
from django.shortcuts import render_to_response
from your_app.models import ExampleModel
def xhr_test(request, format):
obj = ExampleModel.objects.all()
if request.is_ajax():
data = serializers.serialize('json', obj)
return HttpResponse(data,'json')
else:
return render_to_response('template.html', {'obj':obj}, context=...)
または、 DjangoのRESTfulフレームワークであるdjango-pistonを使用することもできます。私は自分のプロジェクトでこのモジュールを使用しています。リソース(ビューのようなもの)を定義でき、URLに渡されるmime-typeまたはformatに応じて、html、xml、またはjsonのいずれかを出力します。すべてのビュー(または大部分)を異なる形式で返す必要がある場合は、これがおそらく最善の方法です。
于 2011-01-19T21:46:57.107 に答える
0
これにはデコレータを使用しました。ビューがコンテキスト、テンプレート、および代替テンプレートを返すようにします。
Ajax バージョンがデータを返したい場合、3 番目の戻り値は JSON に変換するデータ オブジェクトにすることができます。
于 2013-02-05T22:57:44.510 に答える