Django 重定向调用将包名称附加到 url
Django redirect call appends package name to url
我正在编写一个用于在 Django 中编辑标题的视图(在 'project_edit.html'
,并重定向到 'project_detail.html'
页面,但是(松散地)遵循教程 here 我是使用重定向方法:
def project_edit(request, project_id):
project = get_object_or_404(Project, pk=project_id)
if request.method == "POST":
form = ProjectForm(request.POST)
if form.is_valid():
project_update = form.save(commit=False)
project.title = project_update.title
project.save()
return redirect(to='gantt_charts.views.project_detail', kwargs={'pk', project.pk}, permanent=True)
else:
messages.error(request, "Form invalid!")
return render(request, 'project_edit.html', {'project':project, 'form':form})
else:
form = ProjectForm()
return render(request, 'project_edit.html', {'project':project, 'form':form})
在教程中,他们还使用重定向:
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return redirect('blog.views.post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'blog/post_edit.html', {'form': form})
但是当我点击我的 link http://localhost:8000/project/2/edit
并提交我的表格时,我被发送到:http://localhost:8000/project/2/gantt_charts.views.project_detail
我不明白为什么。
查看 shortcuts.py 中的 redirect
定义,然后查看 resolve_url
定义,我唯一的猜测是它下降到底部,然后按原样返回。为什么不执行查找?
编辑:
这是我为该应用程序设置的 url 模式:
urlpatterns = patterns('',
url(r'^(?:project)?/?$', views.project_list),
url(r'^project/(?P<project_id>\d+)/edit$', views.project_edit),
url(r'^project/(?P<project_id>\d+)/[A-z\-]{0,50}$', views.project_detail),
)
为您的项目详细信息添加名称url:
url(r'^project/(?P<project_id>\d+)/[A-z\-]{0,50}$',
views.project_detail, name='project_detail`),
然后在redirect()
调用中引用这个名字:
return redirect('project_detail', project_id=project.pk, permanent=True)
我正在编写一个用于在 Django 中编辑标题的视图(在 'project_edit.html'
,并重定向到 'project_detail.html'
页面,但是(松散地)遵循教程 here 我是使用重定向方法:
def project_edit(request, project_id):
project = get_object_or_404(Project, pk=project_id)
if request.method == "POST":
form = ProjectForm(request.POST)
if form.is_valid():
project_update = form.save(commit=False)
project.title = project_update.title
project.save()
return redirect(to='gantt_charts.views.project_detail', kwargs={'pk', project.pk}, permanent=True)
else:
messages.error(request, "Form invalid!")
return render(request, 'project_edit.html', {'project':project, 'form':form})
else:
form = ProjectForm()
return render(request, 'project_edit.html', {'project':project, 'form':form})
在教程中,他们还使用重定向:
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return redirect('blog.views.post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'blog/post_edit.html', {'form': form})
但是当我点击我的 link http://localhost:8000/project/2/edit
并提交我的表格时,我被发送到:http://localhost:8000/project/2/gantt_charts.views.project_detail
我不明白为什么。
查看 shortcuts.py 中的 redirect
定义,然后查看 resolve_url
定义,我唯一的猜测是它下降到底部,然后按原样返回。为什么不执行查找?
编辑:
这是我为该应用程序设置的 url 模式:
urlpatterns = patterns('',
url(r'^(?:project)?/?$', views.project_list),
url(r'^project/(?P<project_id>\d+)/edit$', views.project_edit),
url(r'^project/(?P<project_id>\d+)/[A-z\-]{0,50}$', views.project_detail),
)
为您的项目详细信息添加名称url:
url(r'^project/(?P<project_id>\d+)/[A-z\-]{0,50}$',
views.project_detail, name='project_detail`),
然后在redirect()
调用中引用这个名字:
return redirect('project_detail', project_id=project.pk, permanent=True)