django class 基于视图无限加载更多过滤项目重复自己

django class based-view infinite load more with filtered items repeating themself

我有一个文章列表,当我尝试对它们进行排序时,例如按日期,我​​注意到一些有趣的事情(而且很烦人):

我的分页限制为最多 10 篇文章,但无论我选择什么日期(我在 10 月份有 10 篇文章),我的加载更多按钮始终处于打开状态。

所以当我选择按 10 月排序时,会发生以下情况:

列出了我 2015 年 10 月的文章,我点击加载更多,我看到了 2016 年 1 月的文章。 然后,如果我点击加载更多,我会看到 2015 年 12 月,然后是 11 月 ,然后又是 10 月。

这将无限重复。

作为记录,我按以下格式发送日期:2016-01 并且它以相同的方式存储在数据库中,2016-01-26

所以这是我对日期的看法:

class DateListView(BaseArticleView, ListView):
  view_url_name = 'djangocms_press:articles-date'

  def get(self, request, *args, **kwargs):
    context = {}

    qs = super(DateListView, self).get_queryset()

    qs = qs.filter(date_realization__startswith=self.kwargs['daterealization'])
    self.object_list = qs

    context.update(self.get_context_data(**kwargs))
    context[self.context_object_name] = context['object_list']
    context['load_more_url'] = self.get_load_more_url(self.request, context)
    return self.render_to_response(context)

  def render_to_response(self, context):
    if self.request.is_ajax():
        response = self.render_to_json_response(context)
    else:
        response = super(DateListView, self).render_to_response(context)
    return response

def get_load_more_url(self, request, context):
    args = request.GET.copy()
    page_obj = context.get('page_obj', None)

    if not page_obj or not page_obj.has_next():
        return ''

    args[self.page_kwarg] = page_obj.next_page_number()
    return '?{}'.format(args.urlencode())

def render_to_json_response(self, context, **response_kwargs):
    if 'current_app' not in context:
        context['current_app'] = resolve(self.request.path).namespace

    c = RequestContext(self.request, context)

    html_items_list = render_to_string(
        'base_templates/template_press.html',
        context,
        context_instance=c)

    html_items_list = html_items_list.strip()

    json_response = {
        'html_items_list': html_items_list,
        'load_more_url': self.get_load_more_url(self.request, context),
    }

    return JsonResponse(json_response)

以及我为 ajax、

所做的事情

关于改变select(允许选择类别):

    ajaxArticles = function(urlAjax, category) {
      var $articleList = $("#articles-list");

      $ajaxresult = $.ajax({url: urlAjax, success: function(result) {
        var content =  $('<div/>').html(result.html_items_list).contents().find("#articles-list");
        $articleList.html(content.html());

        updateLoadMoreButton(result.load_more_url);
      }});
}

urlAjax 是我们示例中的日期,

url(r'^date/(?P[\w.@+-]+)/$', DateListView.as_view(), name='articles-date'),

最后,我点击加载更多按钮:

    $(document).on('click', '#loadmore', function(event) {
      event.preventDefault();
      $this = $(this);
      var $articleList = $("#loadAppend");

      $.ajax({url: $this.attr('href'), success: function(result) {

        var content = $('<div/>').html(result.html_items_list).contents().find("#articles-list");

        content.html()
        $articleList.append(content.html());
        updateLoadMoreButton(result.load_more_url);
      }});
});

$this.attr("href) is "?page=Number

我迷路了。有没有人知道这个问题? 为什么它不只返回询问的项目?

我解决了,我在点击我的加载更多按钮时没有请求好的 url,当我点击它时它请求所有 url。