3

もっと読み込むボタンがクリックされるたびに、10個のアイテムを読み込もうとしています。最初に最初の 10 個のアイテムを送信し、ボタンが押されるたびに dajaxice を使用してさらに 10 個のアイテムをロードします。

これが私の見解です

def dj(request, slug):
    dj = DJ.objects.get(slug=slug)
    dj_song_list = Song.objects.filter(artist=dj, duplicate=False).order_by('-votes', '-release_date')[:10]
    return render(request, 'hunt/dj.html', {'dj_song_list': dj_song_list, 'slug': slug, 'dj': dj})

ここに私のjavascriptがあります

<script type="text/javascript">
    function load() {
        Dajaxice.hunt.load_more(Dajax.process, {'items': $("#dj_song_list").find('div').length - 1, 'dj_name': $('.dj_name').text().trim()})
    }
</script>

ここに私のajax.pyがあります

@dajaxice_register
def load_more(request, items, dj_name=None):
    if dj_name:
        dj = DJ.objects.get(name=dj_name)
        dj_song_list = Song.objects.filter(artist=dj, duplicate=False).order_by('-votes', '-release_date')[:items+10]
        render = render_to_string('hunt/dj.html', {'dj_song_list': dj_song_list, 'slug': dj.slug, 'dj': dj.name})
        dajax = Dajax()
        dajax.assign('#edmhunters_body','innerHTML',render)
        return dajax.json()

このコードはさらに 10 曲をロードしますが、DJ オブジェクトが正しく渡されません。次のエラーが表示されます

DoesNotExist: DJ matching query does not exist.

調査したところ、スラッグは ajax 呼び出しで正常に印刷されていましたが、ビューではhardwell/hunt/img/.jpg. おそらく、ナメクジの取得方法に関係があります。スラッグが取得されるHTMLは次のとおりです。

<a href="{% url 'dj' slug=dj.slug %}"><img src="{{ STATIC_URL}}hunt/img/{{ dj.rank }}.jpg"/></a>

スラッグが最後に文字列を追加するのはなぜですか?

ビューにコードを追加して、スラッグの余分な文字列をトリミングしましたが、それでも期待どおりに機能しません。エラーはスローされませんDoesNotExistが、DJ オブジェクトはまだ渡されていません。

if slug.endswith('/hunt/img/.jpg'):
        slug = slug[:-len('/hunt/img/.jpg')]

これが最初にロードされたビューです

これが最初にロードされたビューです

これは、AJAX 呼び出し後のビューです。

これは、AJAX 呼び出し後のビューです。

私は何を間違っていますか?これに対する簡単な解決策はありますか?

4

1 に答える 1

1

1 つの方法では、スラッグを使用して Dj を見つけ、load_more名前を使用しています。両方で dj slug を使用する必要があります。見つかった div の数を渡す代わりに、Django のページネーションを使用してより多くのアイテムを取得します。

ページ パラメータ send を load more にインクリメントするだけです。

@dajaxice_register
def load_more(request, page, dj_slug=None):
    if dj_slug:
        try:
            dj = DJ.objects.get(slug=dj_slug)
        except DJ.DoesNotExist:
            return None
        queryset = Song.objects.filter(artist=dj, duplicate=False).order_by('-votes', '-release_date')
        paginator = Paginator(queryset)

        render = render_to_string('hunt/dj.html', {
            'dj_song_page': paginator.page(page), 
            'slug': dj.slug, 
            'dj': dj.name
        })
        dajax = Dajax()
        dajax.assign('#edmhunters_body','innerHTML', render)
        return dajax.json()

dj_song_page は、ページネーターによって返されるページです。そのページのアイテムが含まれます。ページネーションに関する Django ドキュメントの詳細については、 https ://docs.djangoproject.com/en/1.6/topics/pagination/ を参照してください。

私が思う主な問題は、名前ではなくスラッグを使用する必要があることです。クエリセットは、ビュー内のものと同じである必要がありdjます。

于 2014-03-31T08:46:05.130 に答える