Python 如何修复Django的NoReverseMatch?
编辑:此问题与其他问题不同,因为此问题专门询问如何使用ModelViewSet类执行此操作 我正在尝试制作一个博客帖子/facebook墙式应用程序,但在Django中发现一个NoReverseMatch错误。它发生在尝试提交post表单之后 这是我的观点Python 如何修复Django的NoReverseMatch?,python,django,Python,Django,编辑:此问题与其他问题不同,因为此问题专门询问如何使用ModelViewSet类执行此操作 我正在尝试制作一个博客帖子/facebook墙式应用程序,但在Django中发现一个NoReverseMatch错误。它发生在尝试提交post表单之后 这是我的观点 from django.shortcuts import render, get_object_or_404, redirect from wall.models import Post from .forms import PostForm
from django.shortcuts import render, get_object_or_404, redirect
from wall.models import Post
from .forms import PostForm
def index(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'wall/index.html', {'form': form})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'wall/post_detail.html', {'post': post})
url.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^post_detail/(?P<pk>\d+)/$', views.post_detail, name='post_detail'),
]
我认为您的问题是在提交表单后重定向,更改
return redirect('post_detail', pk=post.pk)
到
(要导入反向,请使用:从django.core.urlResolver导入反向
)
正如阿拉斯代尔所指出的,你的基本URL中也缺少一个包含的
$
。py当你包含应用程序的URL时,你的正则表达式中似乎有一美元。移除它 您的错误消息是否在表单提交后出现?@Lindow是的,我会在问题中添加此消息。然后查看我的回答否,我仍然会收到相同的错误。您是否能够通过url进入创建的页面,或者表单提交时仍然存在问题?它说找不到页面。我尝试了这两种方法(一个虚构的主键)这些类型的错误可能有多种原因,请尝试在url末尾添加/
,就像这样:127.0.01:8000/post\u detail/1/
,是否有效?(你试图访问的url必须存在,否则它将返回404)它给我的错误与不起作用的错误相同。什么不起作用?如果您已经从包含中删除了美元,那么应该可以修复错误。确保已重新启动服务器。我从url模式中删除了$,并重新启动了服务器。从include中删除它是什么意思?@MatthewDrill他想从你的基本URL.py中删除$include,你能把文件给我们看一下吗?听起来你把美元从错误的地方删除了。有关示例,请参见。
from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.auth import views as auth_views
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', include('wall.urls'), name='index'),
url(r'^accounts/register/$', views.register, name='register'),
url(r'^accounts/register/complete/$', views.registration_complete, name='registration_complete'),
url(r'^accounts/login/$', auth_views.login, name='login'),
url(r'^accounts/logout/$', auth_views.logout, name='logout'),
url(r'^accounts/loggedin/$', views.logged_in, name='loggedin'),
]
from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.auth import views as auth_views
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', include('wall.urls'), name='index'),
url(r'^accounts/register/$', views.register, name='register'),
url(r'^accounts/register/complete/$', views.registration_complete, name='registration_complete'),
url(r'^accounts/login/$', auth_views.login, name='login'),
url(r'^accounts/logout/$', auth_views.logout, name='logout'),
url(r'^accounts/loggedin/$', views.logged_in, name='loggedin'),
]
return redirect('post_detail', pk=post.pk)
return redirect(reverse('post_detail', kwargs={'pk': post.pk}))