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

时间:2016-02-17 16:01:19

标签: jquery django django-class-based-views

我有一个文章列表,当我尝试对它们进行排序时,按日期为例,我注意到了一些有趣的东西(并且令人烦恼):

我的分页限制为最多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做了什么,

在更改选择(允许选择类别)时:

    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&#39; ^ date /(?P [\ w。@ + - ] +)/ $&#39;,DateListView.as_view(),name =&#39; articles-date&#39; ),

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

    $(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(&#34; href)是&#34;?page = Number&#34;

我太失落了。有没有人对这个问题有所了解? 为什么它不仅仅返回被要求的项目?

1 个答案:

答案 0 :(得分:0)

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