Python Django URL相互附加

Python Django URL相互附加,python,django,url,Python,Django,Url,我很难理解Django发生了什么。我创建了一个delete函数,可以根据DB record id删除一条记录。删除后,我想重定向到我按下“delete”按钮的页面。但是,当我在浏览器中查看URL时,它现在包含两个视图的附加版本。为了清晰起见,我将在下面显示我的代码: URL.py: url(r'entry/current/$', views.current_entry_list, name='current_entry_list'), url(r'^entry/create/$', views.

我很难理解Django发生了什么。我创建了一个delete函数,可以根据DB record id删除一条记录。删除后,我想重定向到我按下“delete”按钮的页面。但是,当我在浏览器中查看URL时,它现在包含两个视图的附加版本。为了清晰起见,我将在下面显示我的代码:

URL.py:

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 current_entry_list(request):
    now = datetime.datetime.now()
    month = now.month
    current_entries = Entry.objects.filter(input_date__month=11).order_by('-
    input_date').all()
    for entry in current_entries:
        print(entry)
    paginator = Paginator(current_entries, 10)

    page = request.GET.get('page') 

    try:
        current_entries = paginator.page(page)
    except PageNotAnInteger:
        current_entries = paginator.page(1)
    except EmptyPage:
        current_entries = paginator.page(paginator.num_pages)

    context = {
        'current_entries': current_entries,
        'current_month': month,
    }
    return render(request, 'finance/entry.html', context)
以下是我在浏览器中的URL的外观: 127.0.0.1:8000/财务/删除/录入/当前/


为什么重定向的视图URL会附加到上一个URL?还有什么我可以完全替换的吗?

Django将重定向
返回重定向('entry/current/',permanent=True)
视为一个相对地址,并因此附加了这两个地址

如果将其更改为
return redirect('/entry/current/',permanent=True)
则会将您带回根URL

更好的方法是在URL名称上使用
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)
处理
反向
中相对url的代码可以在
django.shortcuts中找到。解析url

可能更改:

return redirect('entry/current/')
致:


我认为这是更好的方法。

我已经尝试过了,但是我得到了这个错误:找不到“当前条目列表”的反向“当前\u条目\u列表”不是有效的视图函数或模式名称。第一种方法似乎有效,但这意味着我必须手动将
/finance/
附加到
条目/current/
中,才能使其工作。您的URL是否包含在另一个带有命名空间的
URLs.py
文件中?如果是这样,则需要更改为
返回重定向(反向(':current\u entry\u list'),permanent=True)
return redirect('entry/current/')
return redirect('/entry/current/')
 return redirect(reverse('current_entry_list'), permanent=True)