繁体   English   中英

Django / Python:如何创建从一个视图/ URL到另一个视图/ URL的重定向?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM