Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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
Python 如何修复Django的NoReverseMatch?_Python_Django - Fatal编程技术网

Python 如何修复Django的NoReverseMatch?

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

编辑:此问题与其他问题不同,因为此问题专门询问如何使用ModelViewSet类执行此操作

我正在尝试制作一个博客帖子/facebook墙式应用程序,但在Django中发现一个NoReverseMatch错误。它发生在尝试提交post表单之后

这是我的观点

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}))