[英]Django/Python: How to create redirect from one view/url to another?
Django 1.8 / Python 3.4
我有一个website.html,它显示数据库中的条目,每个条目均由其ID标识。 现在,在每个显示的条目的末尾,我都有一个指向“编辑”视图的链接,如下所示:
<td><a href="{% url 'edit' object.id %}">edit</a></td>
链接工作正常,并导致正确的视图:
def edit(request, object_id):
在views.py
实现。 还有一些代码也可以正确执行,在视图的最后一行中,我有:
return redirect('website.html')
显然,在编辑了所选条目之后,我希望我的website.html的编辑条目再次显示在浏览器中: 127.0.0.1:8000/website/
: 127.0.0.1:8000/website/
。 但是,发生的是,我得到一个Page not found (404)
错误,并显示以下信息:
Requested URL 127.0.0.1:8000/website/2/website.html
此处的“ 2”是条目的ID。
也许我对重定向的工作方式有一个错误的想法,但是我假设不是从url.py调用相应视图的url,而是打开redirect()
函数中提供的url?
但是,发生的情况是此URL被附加到视图的URL!
这是我的urls.py
:
from django.conf.urls import include, url
from django.contrib import admin
from www.list.views import website, edit
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^website/$', website, name="website"),
url(r'^website/(?P<object_id>\d+)/$', edit, name="edit"),
]
我很确定第三个url条目是引起问题的原因,但是我完全不知道如何更改它以使重定向正常工作。 另外,编辑视图没有实际的网站(模板),但是我应该为其提供URL,所以这是我能想到的最好的。
它的工作方式是:单击website.html上的“ edit”链接,将执行edit-view中的代码,然后,再次显示数据库条目中具有更改的website.html。
^^如何实现? 任何帮助表示赞赏!
重定向使用name
或绝对URL。 您应该使用URL的名称 :
return redirect('website') # since name="website"
或绝对网址,例如:
return redirect('/website/')
您可以使用反向功能代替重定向
from django.core.urlresolvers import reverse return reverse('website')
我发现了错误和解决方法:
在编辑视图的末尾,编写“ return redirect('website')”是正确的。 但是,正如我所假设的那样,urls.py中的edit URL是错误的。
代替
url(r'^website/(?P<object_id>\d+)/$', edit, name="edit"),
应该只是
url(r'^(?P<object_id>\d+)/$', edit, name="edit"),
不过还是谢谢你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.