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