在django app中清理网址。没有?page = 1模式

时间:2017-07-28 08:12:12

标签: python regex django listview url

我希望我的网址格式如下图所示:

host:8000/archive/2/

我在视图中定义page_kwarg,但仍然收到:host:8000/en/2

代码表格主 url.py 文件:

url(_(r'^archive'), include('events.urls_archive', namespace='archive')),

启动edit1 并将主站点链接到我的应用程序:

<a href="{% url 'archive:list' %}" title="{% trans 'Archive' %}">
    {% trans 'Archive' %}
</a>

结束edit1

启动edit2

这是我的应用 urls_archive.py 中的网址:

urlpatterns = [
    url('^/(?P<page>\d+)/$', ArchiveListView.as_view(), name="list"),
    url('^/(?P<slug>[-\w]+)/(?P<pk>\d+)$', ArchiveDetailView.as_view(), name="detail"),
]

结束edit2

我的观点代码:

class ArchiveListView(ListView):
    model = Booking
    queryset = Booking.objects.filter(period__type='archive').order_by('-date_start')
    paginate_by = 80
    page_kwarg = 'page'

这是我的模板代码:

        {% if is_paginated %}
            {% if page_obj.has_previous %}
                <a href="/{{ page_obj.previous_page_number }}" class="arrow left"><h4>Previous</h4></a>
            {% endif %}
            <span class="arrow header"><h4>Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}</h4></span>
            {% if page_obj.has_next %}
                <a href="/{{ page_obj.next_page_number }}" class="arrow right"><h4>Next</h4></a>
            {% endif %}
        {% endif %}

请提供任何帮助。 感谢。

1 个答案:

答案 0 :(得分:0)

page_kwarg设置传递页码的密钥。它不会影响页面中的使用方式。出于某种原因,您直接将其输出为/{{ page_obj.previous_page_number }},后者仅解析为/2。您应该以与传入时相同的格式输出它:

?page={{ page_obj.previous_page_number}}

修改

如果您希望将页码指定为路径参数的一部分,则应使用url标记,与任何其他URL一样:

{% url 'archive' page=page_obj.previous_page_number %}