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。
我有一个文章列表,当我尝试对它们进行排序时,例如按日期,我注意到一些有趣的事情(而且很烦人):
我的分页限制为最多 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。