2011-01-19 13 views
3

私はかなり大きなプロジェクトに取り組んでいます。ここでは、通常のリクエストと同じURLを使ったajaxリクエストを介してすべてのビューにアクセスできるようにします。私は非常に一般的な方法でこれを処理する小さなフレームワークを作成する方法のアイデアを探しています。ビューがajax経由で呼び出されるかどうかによって、別のテンプレートをレンダリングしてHttpResponseオブジェクトの代わりにjsonを返す必要があります。私はこのトピックに関するアイデアを集めたいと思います。主な目的は、乾いた原則を避け、可能な限り再利用可能なコードを作ることではありません。私はすでに一般的なビュー、ビューのデコレータなどさまざまなオプションを検討していましたが、私は何かを開いています。だから私はあなたの提案を聞かせてくれるか、あなたが知っているレディメイドスニペットに向けて私を指差すようにしてください!djangoを使ったAjaxビュー

答えて

6

This articleは、ajaxと定期的なリクエストの両方を処理する方法についての非常に良いチュートリアルのようです。 requestオブジェクトには、を検索するis_ajax()メソッドがあります。これはもちろん、リクエストを送信する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タイプまたはフォーマットに応じて、html、xml、またはjsonのいずれかを発行します。すべての単一のビュー(または大多数)を異なるフォーマットで返す必要がある場合には、これはおそらく最良の方法です。

+0

よくこれを行う一般的な方法です、私はいつもビューのajax/non-ajaxリクエストの切り替えを繰り返す必要がない素晴らしい方法を探しています... –

+0

@lazerは私の終わりを見ますジャンゴピストンについて語る答え。これにより、MIMEタイプまたはURLパラメータに基づいて異なる応答を返すことができます。 –

+0

+1は既にプロジェクトの一部であるピストンのアイデアですが、 "通常の"使用のための残りのAPIとしてのみ使用されています。 –

0

私はこれにデコレータを使用しました。ビューにコンテキスト、テンプレート、および代替テンプレートを戻します。

Ajaxバージョンでデータを返す場合、3番目の戻り値をJSONに変換するデータオブジェクトにすることができます。

関連する問題