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.

在调查中,我发现 slug 在 ajax 调用中打印良好,但在视图中它类似于hardwell/hunt/img/.jpg. 它可能与如何检索蛞蝓有关。这是我在其中检索 slug 的 HTML。

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

为什么蛞蝓要在末尾附加字符串?

我什至在视图中添加了一个代码来修剪 slug 的额外字符串,但它仍然无法按预期工作。它不会抛出DoesNotExist错误,但 DJ 对象仍未通过。

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

这是最初加载的视图

这是最初加载的视图

这是 AJAX 调用后的视图

这是 AJAX 调用后的视图

我究竟做错了什么?有没有更简单的解决方案?

4

1 回答 1

1

在一种方法中,您使用 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 是分页器返回的页面。它将包含该页面的项目。在此处阅读有关分页的 django 文档的更多信息:https ://docs.djangoproject.com/en/1.6/topics/pagination/

我认为主要问题是您必须使用 slug 而不是名称。查询集必须与dj视图中的相同。

于 2014-03-31T08:46:05.130 回答