在 url 中使用 id 而不是 od "?page=" 进行分页



我在django 1.8中有一个应用程序,我的问题是参数?我的目标是地址为127.0.0.0.1/blog/1-和搜索结果。我可以指望提示吗?

我的网址:

urlpatterns = [
    url(r'^$', MyListView.as_view(), name='list'),
    url(r'/(?P<slug>[-w]+)/(?P<pk>d+)$', views.BlogDetailView.as_view(), name='blog_detail'),
]

我的观点:

class MyListView(ListView):
    model = models.Blog
    queryset = models.Blog.objects.order_by('-pub_date')
    template_name = 'blog/blog_list.html'
    context_object_name = 'blog_list'
    paginate_by = 10

模板中的代码

{% if is_paginated %}
  <ul class="pagination">
    {% if page_obj.has_previous %}
      <li><a href="?page={{ page_obj.previous_page_number }}">&laquo;</a></li>
    {% else %}
      <li class="disabled"><span>&laquo;</span></li>
    {% endif %}
    {% for i in paginator.page_range %}
      {% if page_obj.number == i %}
        <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
      {% else %}
        <li><a href="?page={{ i }}">{{ i }}</a></li>
      {% endif %}
    {% endfor %}
    {% if page_obj.has_next %}
      <li><a href="?page={{ page_obj.next_page_number }}">&raquo;</a></li>
    {% else %}
      <li class="disabled"><span>&raquo;</span></li>
    {% endif %}
  </ul>
{% endif %}

很难管理您想要的方式。如果您的分页关键字有问题,则可以通过在ListView中设置" page_kwarg"来更改用于分页的参数。像这样

class MyListView(ListView):
    model = models.Blog
    queryset = models.Blog.objects.order_by('-pub_date')
    template_name = 'blog/blog_list.html'
    context_object_name = 'blog_list'
    paginate_by = 10
    page_kwarg = 'my_page_number'

现在您可以使用127.0.0.0.1/blog?my_page_number=2进行拖放

或者如果真的想将页码作为URL paraameter传递,则在列表视图中覆盖paginate_queryset方法,并在此处覆盖page_kwarg

有关来源,请参阅此处https://github.com/django/django/blob/master/master/django/django/views/generic/list.py.py#l54

最新更新