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 再次显示数据库条目中的更改。
^^ 如何实现?感谢您的帮助!
重定向使用 name
s 或绝对 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"),
还是谢谢你!
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 再次显示数据库条目中的更改。
^^ 如何实现?感谢您的帮助!
重定向使用 name
s 或绝对 URLS。您应该使用您的 URL:
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"),
还是谢谢你!