使用 django 的 URL 和正则表达式

Posted

技术标签:

【中文标题】使用 django 的 URL 和正则表达式【英文标题】:URL and regex with django 【发布时间】:2016-08-23 02:35:24 【问题描述】:

我的 django 项目中的 urls.py 有问题

我有一个这样的网址:

http://127.0.0.1:8000/cars/?page=2 然后当我点击下一步时,它将是:

http://127.0.0.1:8000/cars/cars?page=3

我有一个错误:(

网址是:

url(r'^cars/$page=n', TaskViewSet.as_view()),

【问题讨论】:

想告诉我们错误是什么? 这是消息错误: 找不到页面 (404) 请求方法:GET 请求 URL:127.0.0.1:8000/cars/cars?page=3 使用 TaskAPI.urls 中定义的 URLconf,Django 尝试了这些 URL 模式,顺序如下:^$ ^cars/$ ^ admin/ 当前 URL,cars/cars,与其中任何一个都不匹配。 使用edit 按钮添加新信息。还包括您已经尝试/研究过的解决问题的方法。 向我们展示您的模板文件 【参考方案1】:

发生这种情况是因为您在模板中链接了诸如 <a href="cars?page= page_obj.next_page_number "> 之类的下一个/上一个页面。

您应该对您的项目进行以下更改:

重命名 url conf,就像 @jonatron 建议的那样:

url(r'^cars/$', TaskViewSet.as_view()),

然后在您的模板中,确保将下一个/上一个页面与其绝对位置链接,如下所示:

<a href="/cars/?page= page_obj.next_page_number ">next</a>

此外,您可以命名您的 url conf 并生成完整的 url,而无需每次都重写:

url(r'^cars/$', TaskViewSet.as_view(), name='cars'),

<a href="% url 'cars' %?page= page_obj.next_page_number ">next</a>

【讨论】:

【参考方案2】:

你需要:

url(r'^cars/$', TaskViewSet.as_view()),

后面有什么?是一个查询字符串,在 URL 模式中不匹配。您可以访问视图中的 ?page 值,例如:

page = request.GET['page']

【讨论】:

这是我的观点: from django.views.generic import ListView class TaskViewSet(ListView): model = Task template_name = 'task.html' context_object_name = "car_list" paginate_by = 1 page = request.GET ['page'] 但我在请求未解决的参考中有错误,我是否按请求替换 Listview?谢谢你

以上是关于使用 django 的 URL 和正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

python 之 Django框架(路由系统include命名URL和URL反向解析命名空间模式)

Django进阶-路由系统

包含正斜杠的 Django URL 正则表达式

django 在列表中使用正则表达式排除 url

django url 正则表达式不匹配

django1.0和django2.0的基于正则表达式的url区别