簡體   English   中英

加載10個項目的AJAX調用無法按預期工作

[英]AJAX call to load 10 more items doesn't work as expected

每次點擊加載更多按鈕時,我正在嘗試加載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.

在調查中我發現slug在ajax調用中打印正常,但在視圖中它就像hardwell/hunt/img/.jpg 它可能與如何回收slug有關。 這是我檢索slug的HTML。

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

為什么slug會在最后追加字符串?

我甚至在視圖中添加了一個代碼來修剪slug的額外字符串,但它仍然沒有按預期工作。 它不會拋出DoesNotExist錯誤,但仍然沒有傳遞DJ對象。

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

這是最初加載的視圖

這是最初加載的視圖

這是AJAX調用之后的視圖

這是AJAX調用之后的視圖

我究竟做錯了什么? 有沒有更簡單的解決方案?

在一種方法中,您使用slug來查找Dj,而在load_more您使用的是名稱。 你應該在兩者中使用dj slug我會使用Django分頁來獲取更多的項目而不是傳遞找到的div的數量。

您可以將頁面參數增量發送到負載更多。

@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是paginator返回的頁面。 它將包含該頁面的項目。 閱讀有關分頁的django文檔的更多信息: https//docs.djangoproject.com/en/1.6/topics/pagination/

我認為的主要問題是你必須使用slug而不是名字。 查詢集必須與dj視圖中的查詢集相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM