我有这个观点:
class PageView(ListView):
# ... code ...
paginate_by = 4
在模板中我有类似的东西:
<div class="pagination">
<span class="page-links">
{% if page_obj.has_previous %}
<a href="{{ request.path }}?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="page-current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="{{ request.path }}?page={{ page_obj.next_page_number }}">next</a>
{% endif %}
</span>
</div>
如何在django中将GET变量?page=number
转换为/page/number/
?
答案 0 :(得分:1)
我现在无法测试,但您应该可以重复使用display_array($myArr);
的全部内容。
查看ListView
:
django.views.generic.list.MultipleObjectMixin#paginate_queryset
这意味着Django首先在视图def paginate_queryset(self, queryset, page_size):
"""
Paginate the queryset, if needed.
"""
paginator = self.get_paginator(
queryset, page_size, orphans=self.get_paginate_orphans(),
allow_empty_first_page=self.get_allow_empty())
page_kwarg = self.page_kwarg
# HERE
page = self.kwargs.get(page_kwarg) or self.request.GET.get(page_kwarg) or 1
try:
page_number = int(page)
except ValueError:
if page == 'last':
page_number = paginator.num_pages
else:
raise Http404(_("Page is not 'last', nor can it be converted to an int."))
try:
page = paginator.page(page_number)
return (paginator, page, page.object_list, page.has_other_pages())
except InvalidPage as e:
raise Http404(_('Invalid page (%(page_number)s): %(message)s') % {
'page_number': page_number,
'message': str(e)
})
中查找页码,然后在kwargs
参数中查找页码。
get
中的值来自视图自己的self.kwargs
- 请参阅**kwargs
。这意味着您应该只能定义django.views.generic.base.View#as_view
之类的网址并将其与现有的CBV一起使用 - 它应该自己选择页码。
答案 1 :(得分:0)
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def listOfSomethinView(request, page):
paginator(Something.objects.all(), 10)
try:
list_of_something = paginator.page(page)
except PageNotAnInteger:
list_of_something = paginator.page(1)
except EmptyPage:
list_of_something = paginator.page(paginator.num_pages)
return render(request, 'path_to_your_template', {
'list_of_something': list_of_something,
})
在urls.py中添加:
url(r'^event/(?P<page>[0-9]{1,10})/$', views.listOfSomethingView, name='listOfSomething')
模板中的使用类似这样的内容
{% url 'app:listOfSomething' paginator.previous_page_number %}
答案 2 :(得分:0)
行。我解决了 实际上当我有:
url(r'^events/(?P<page>[0-9]+)/$', views.PageView.as_view(), name='events'),
由于page
参数丢失且urls.py
无法知道/events/
路径,因此会引发错误。
所以,在我的网址映射(urls.py)中我写过:
url(r'^events/$', views.PageView.as_view(), name='events'),
url(r'^events/(?P<page>[a-z0-9]+)/$', views.PageView.as_view(), name='events'),
当我转到/events/
时,不需要参数,page
设置为1
,因为没有提供page_kwarg
,一切都很好。
当我转到/events/<page>/
时,接受该变量,最后它正在工作。
修改:我添加了[a-z0-9]
而不是[0-9]
,因为访问/events/last/
时需要它。在url模板标记中,我必须提供last
字符串:{% url 'events' 'last' %}
感谢您的回答,如果您认为我的解决方案不好,请在我的回答下面发表评论。
对不起我的语法。