1

Ajaxを使用してページ番号を変更するためにギャラリーページでajaxをサポートする必要がある最後の部分を除いて、サイトはほぼ完成しています。

ギャラリーページの表示:

def gallerypages(request, page):
    items = Example.objects.all().order_by('-pk')
    categories = Categorie.objects.all()

    paginator = Paginator(items, 12)

    try:
       itemsList = paginator.page(page)
    except PageNotAnInteger:
       itemsList = paginator.page(1)
    except EmptyPage:
       itemsList = paginator.page(paginator.num_pages)

    if items.count()>1:
       return render_to_response('gallery.html', {'items': itemsList,'categories': categories,}, context_instance = RequestContext(request))

Dajax/Dajaxiceはあまり文書化されていません...私はいくつかの画像を表示する必要があるだけです。

4

2 に答える 2

10

DjangoでAJAXを簡単にすることを目的としたDajax/Dajaxiceでそれを行う方法は次のとおりです。

  1. ドキュメントに従ってDajaxiceDajaxをインストールします。ドキュメントにはそれが記載されていないようですが、使用することもできますpip

    pip install django-dajaxice
    pip install django-dajax
    

    ライブラリを取得します。いずれの場合も、必ずドキュメントの指示に従ってDjangoアプリをインストールし、必要なJavascriptライブラリをにロードしてgallery.htmlください。(Dajaxを機能させるには、jQueryまたは同様のJSフレームワークをインストールする必要があることに注意してください。)

  2. で、とがHTMLにレンダリングされるgallery.htmlセクションを分離します。このセクションを、たとえばと呼ばれる別のDjangoテンプレートにコピーしてから、のセクションを特定のIDを持つ空白に置き換えます。itemscategoriesgallery_content.htmlgallery.html<div>

    <div id="gallery-content"></div>
    

    あなたがしているのは#gallery-content、後でDajaxice呼び出しを介して各ページに対して生成されるHTMLのプレースホルダーとして作成することです。

  3. ここで、の別の場所でgallery.html、ユーザーがどのページに移動するかを指示する方法を作成します。

    <input id="page-number">
    <button onclick="Dajaxice.myapp.gallerypages_content(Dajax.process, {'page': document.getElementById('page-number').value})">Go to page</button>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
    

    onclickユーザーがボタン要素をクリックするたびに呼び出されるJavascriptコードは、次の2つのことを行います。(1)入力要素の値を取得し、(2)非同期で(通常のWebなしで#page-number)Djangoビューに送信します。 Javascript呼び出しgallerypages_contentを介したブラウザページのロード。これは、Djangoアプリの名前に置き換える必要があることにDajaxice.myapp.gallerypages_content注意してください。myapp

  4. 最後に、ビューを作成する必要があります。これは、 Dajaxice/Dajaxで動作するように変更されたgallerypages_content既存のビューのバリアントです。gallerypagesDajaxiceは、でそのようなビューを検索するようにハードコーディングされているため、次のようにフォルダにajax.py作成ajax.pyします。myapp

    from django.template.loader import render_to_string
    from dajax.core import Dajax
    from dajaxice.decorators import dajaxice_register
    
    @dajaxice_register
    def gallerypages_content(request, page):
    
        page = int(page)
    
        # ... code to calculate itemsList and categories as before ...
    
        html = render_to_string('gallery_content.html',
                                {'items': itemsList,'categories': categories,}, 
                                context_instance = RequestContext(request))
        dajax = Dajax()
        dajax.assign('#gallery-content', 'innerHTML', html)
        return dajax.json()
    

    これは上記のコードが行うことです。(1)パラメータ(つまり、入力要素pageの生の文字列値)をPython整数に変換します。#page-number(2)取得するために以前と同じ計算をitemsList行いcategoriesます; (3)通常のDjango HTTP応答ではなく、HTML文字列にrender_to_stringレンダリングするために使用します。gallery_content.html(4)Dajax APIを使用して、HTMLを#gallery-contentdivに挿入する命令を作成します。(5)そして、ビューの応答として、これらの命令をJSON形式で返します。ハンドラーでのDajaxice呼び出しは、onclick実際にはこれらの命令を受け取り、それらに基づいて動作し(厳密に言えば、これを行うのはDajax.processコールバックです)、HTMLを表示します。で飾る必要があることに注意してgallerypages_contentください@dajaxice_register--それはDajaxiceがすべてを一緒にフックするのに役立ちます。

私はこれを具体的にテストしていませんが、それは私がDajaxice / Dajaxを私のために働かせた方法に基づいており、それがあなたのために働くことを願っています-または少なくともあなたが始められるように!

于 2012-07-30T04:07:07.317 に答える
1

django-dajax または django-dajaxice を使用する必要がありますか?

一言で言えば、いいえ。当時私が抱えていた特定の問題を解決するためのクールなツールとして、これらのプロジェクトを 4 年前に作成しました。

最近では、これらのプロジェクトを使用するのは悪い考えです。

https://github.com/jorgebastida/django-dajax/

于 2015-03-06T15:25:07.603 に答える