我在理解Django中发生的事情时遇到了问题。我创建了一个删除函数,可以根据数据库记录ID删除记录。删除后,我想重定向到我按下'删除'的同一页面。按钮。但是,当我在浏览器中查看URL时,它现在包含两个视图的附加版本。为清楚起见,我将在下方显示我的代码:
urls.py:
A,B WHERE
查看删除方法:
url(r'entry/current/$', views.current_entry_list, name='current_entry_list'),
url(r'^entry/create/$', views.create_entry_form_view, name='create_entry'),
url(r'update/(?P<pk>\d+)/$', views.update_entry_view, name='update_entry'),
url(r'delete/$', views.delete_entry_view, name='delete_entry'),
查看列表记录方法:
def delete_entry_view(request):
if request.method == 'POST':
id = request.POST['id']
Entry.objects.filter(id=id).delete()
return redirect('entry/current/')
以下是浏览器中的URL: 127.0.0.1:8000/finance/delete/entry/current /
为什么重定向的视图网址会附加到以前的网址?无论如何我可以完全替换吗?
答案 0 :(得分:1)
Django将重定向return redirect('entry/current/', permanent=True)
视为相对地址,因此附加了两个。
如果更改为return redirect('/entry/current/', permanent=True)
,则会转到根网址。
更好的方法是在网址名称上使用reverse
:
from django.core.urlresolvers import reverse
from django.shortcuts import redirect
def delete_entry_view(request):
if request.method == 'POST':
id = request.POST['id']
Entry.objects.filter(id=id).delete()
return redirect(reverse('current_entry_list'), permanent=True)
可以在reverse
找到处理django.shortcuts.resolve_url
中相对网址的代码。
答案 1 :(得分:0)
也许改变:
return redirect('entry/current/')
要:
return redirect('/entry/current/')
OR
return redirect(reverse('current_entry_list'), permanent=True)
我认为这是更好的方法。