22

私はDjangoを学んでいて、クラスベースのビューを見つけました。それらのビューにAjaxを実装する方法を考えています。

githubでdjangoプロジェクトを検索したところ、クラスベースのビューを使用しているものが見つかりましたが、ajaxは使用していません。

だから...誰もが両方を使用するオープンソースプロジェクトを知っていますか?そのように学ぶ方が簡単です。

ありがとうございました :)

4

3 に答える 3

13

人気のある dajaxic および dajax パッケージを使用しなくても、簡単なことです。

次のように、リクエスト オブジェクトに対して django の is_ajax() 関数をラップするだけのデコレータを作成すると役立ちます。

def ajax_request(function):
    def wrapper(request, *args, **kwargs):
        if not request.is_ajax():
            return render_to_response('error/ajax_required.html', {},
                context_instance=RequestContext(request))
        else:
            return function(request, *args, **kwargs)
    return wrapper

この特定の失敗を処理する ajax_required というテンプレートがあると仮定します。このようなものは、それが望ましくない場合、ユーザーがブラウザーに ajax 固有の URL を入力するのを防ぎます。

例を短くするため、テンプレートをレンダリングするクラス ベースの ajax ビューを次に示します。

from django.views.generic.base import TemplateView

class AjaxGeneral(TemplateView):
    template_name= None
    def get(self, request):
        data={}
        return render_to_response(self.template_name, data,
            context_instance=RequestContext(request))

    @method_decorator(ajax_request)
    def dispatch(self, *args, **kwargs):
        return super(AjaxGeneral, self).dispatch(*args, **kwargs)

HTML スニペットをレンダリングする必要があるすべての ajax に対して、次のような短いクラス ベースのビューを定義できます。

class ShowSomeTable(AjaxGeneral):
    template_name="some_table.html"

some_table.html に html スニペットが含まれていると仮定します。

このビューの urls.py エントリは次のようになります。

url(r'showtable/$', ShowSomeTable.as_view()),

次のように、通常どおりjsで呼び出すことができます。

$(#dynamic-content).load('/showtable');
于 2012-11-16T02:57:15.420 に答える