Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 找不到页面(404)-没有与给定查询匹配的帖子_Django_Django Urls - Fatal编程技术网

Django 找不到页面(404)-没有与给定查询匹配的帖子

Django 找不到页面(404)-没有与给定查询匹配的帖子,django,django-urls,Django,Django Urls,我在一个Django博客上工作,在偶然发现一个问题的帖子标题上实现了slug。 错误是 找不到页面(404) 请求方法:获取 请求URL: 发起人:blog.views.post\u详细信息 没有与给定查询匹配的Post 这是我的url.py from django.conf.urls import include, url from . import views from django.conf import settings from django.conf.urls.static impo

我在一个Django博客上工作,在偶然发现一个问题的帖子标题上实现了slug。
错误是

找不到页面(404)
请求方法:获取
请求URL:
发起人:blog.views.post\u详细信息

没有与给定查询匹配的Post

这是我的url.py

from django.conf.urls import include, url
from . import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    url(r'^$', views.post_list),
    url(r'^register', views.register),
    url(r'^activate/(?P<activation_key>\w+)/', views.register_confirm),
    url(r'^email_check', views.email_check),
    url(r'^password_check', views.password_check),
    url(r'^login', views.login),
    url(r'^edit/$', views.update_profile),
    url(r'^post/(?P<slug>[-_\w]+)/$', views.post_detail),
    url(r'^post/new/$', views.post_new, name='post_new'),
    url(r'^post/(?P<slug>[-_\w]+)/edit/$', views.post_edit, name='post_edit'),
    url(r'^drafts/$', views.post_draft_list, name='post_draft_list'),
    url(r'^post/(?P<slug>[-_\w]+)/publish/$', views.post_publish, name='post_publish'),
    url(r'^post/(?P<slug>[-_\w]+)/remove/$', views.post_remove, name='post_remove'),
    url(r'^post/(?P<slug>[-_\w]+)/comment/$', views.add_comment_to_post, name='add_comment_to_post'),
    url(r'^comment/(?P<slug>[-_\w]+)/approve/$', views.comment_approve, name='comment_approve'),
    url(r'^comment/(?P<slug>[-_\w]+)/remove/$', views.comment_remove, name='comment_remove'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
它说这个错误是由“post_detail”引起的,所以在这里

def post_detail(request, slug):
    post = get_object_or_404(Post, slug=slug)
    return render(request, 'blog/post_detail.html', {'post': post})

我遗漏了什么?

发生这种情况是因为
new
匹配正则表达式
[-\uw]+

您必须在url模式中重新排序url条目

更改此项:

url(r'^post/(?P<slug>[-_\w]+)/$', views.post_detail),
url(r'^post/new/$', views.post_new, name='post_new'),
url(r'^post/(?P[-\uw]+)/$,views.post\u detail),
url(r“^post/new/$”,views.post\u new,name='post\u new'),
为此:

url(r'^post/new/$', views.post_new, name='post_new'),
url(r'^post/(?P<slug>[-_\w]+)/$', views.post_detail),
url(r'^post/new/$,views.post\u new,name='post\u new'),
url(r'^post/(?P[-\uw]+)/$,视图。post\u详细信息),
说明

代码中的
post\u detail
url条目在
post\u new
url之前进行评估。这使得
post\u detail
post\u new
具有更高的优先级

由于
post\u detail
url是
/post/
+任何与
[-\uw]+
匹配且
new
与正则表达式匹配的内容,Django认为您正在将
new
作为
post\u detail
视图的
slug
传递,并将其作为关键字参数传递给视图。由于没有将
new
作为slug的post,因此视图返回
404notfound

post\u new
位于
post\u detal
上方时,
/post/new/
指向
post\u new
视图,并且
/post/
+任何带有正则表达式的匹配项都指向
post\u detal

它可以工作(谢谢!),但我不确定我是否理解原因。
url(r'^post/new/$', views.post_new, name='post_new'),
url(r'^post/(?P<slug>[-_\w]+)/$', views.post_detail),