Django URL附加到另一个

时间:2017-12-13 04:42:48

标签: python django url

我在理解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 /

为什么重定向的视图网址会附加到以前的网址?无论如何我可以完全替换吗?

2 个答案:

答案 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)

我认为这是更好的方法。