使用 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 和正则表达式的主要内容,如果未能解决你的问题,请参考以下文章