Django/Python:如何创建从一个 view/url 到另一个的重定向?

Django/Python: How to create redirect from one view/url to another?

Django 1.8 / Python 3.4

我有一个 website.html 显示我的数据库中的条目,每个条目都由其 ID 标识。现在,在每个显示条目的末尾,我有一个 link 到 "edit" 视图,如下所示:

<td><a href="{% url 'edit' object.id %}">edit</a></td>

link 工作正常并导致正确的视图:

def edit(request, object_id):

已在 views.py 中实施。也有一些代码被正确执行,在视图的最后一行我有:

return redirect('website.html')

显然,在编辑了所选条目后,我希望我的 website.html 和编辑后的条目再次显示在浏览器中: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 它会打开提供的 url redirect() 函数?!

不过,这个 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" link,正在执行编辑视图中的代码,然后,website.html 再次显示数据库条目中的更改。

^^ 如何实现?感谢您的帮助!

重定向使用 names 或绝对 URLS。您应该使用您的 URL:

name
return redirect('website')   # since name="website"

或绝对值 URL,例如:

return redirect('/website/')

你可以使用反向函数代替重定向

from django.core.urlresolvers import reverse

return reverse('website')

我发现错误及解决方法:

在编辑视图的末尾写"return redirect('website')"是正确的。然而,正如我假设的那样,urls.py 中的编辑 URL 是错误的。

而不是

url(r'^website/(?P<object_id>\d+)/$', edit, name="edit"),

应该是

url(r'^(?P<object_id>\d+)/$', edit, name="edit"),

还是谢谢你!