Django 找不到页面(404)-没有与给定查询匹配的帖子
我在一个Django博客上工作,在偶然发现一个问题的帖子标题上实现了slug。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
错误是 找不到页面(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),