Django 从一个页面重定向到另一个页面
Posted
技术标签:
【中文标题】Django 从一个页面重定向到另一个页面【英文标题】:Django redirect from one page to another 【发布时间】:2016-12-14 06:02:12 【问题描述】:我正在使用 Django 进行一个项目,但在单击链接时从一个页面重定向到另一个页面时遇到了问题。无论我尝试了什么,我最终都会得到一个类似的网址:
localhost:8080/page1/page2
而不是从localhost:8080/page1
移动到localhost:8080/page2
我尝试过使用HttpResponseRedirect(url)
【问题讨论】:
您需要确保url
始终以斜杠开头:"/page2"
。
感谢您的建议@DanielRoseman,但我已经这样做了。
你是如何创建url
的?使用reverse
或reverse_lazy
?还是渲染时在模板中构建?
在模板中@nkhumphreys
好的,您正在模板中呈现 URL 列表?您是否检查了呈现的 html 以查看 URL 的样子?您是在后端使用基于方法的视图还是基于类的视图?
【参考方案1】:
推荐的方式是在 django 模板中使用% url 'url-name' arg1 arg2 kwarg='foo' %
。
您不应在模板中硬编码网址,而应使用网址名称。
更多详情:https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#url
python 代码中的等价物是django.utls.reverse
,它返回绝对网址或django.shortcuts.redirect
,它等价于HttpResponseRedirect(reverse('url_name'))
https://docs.djangoproject.com/en/1.10/ref/urlresolvers/#django.urls.reverse
编辑#1
使用数据库在视图之间传递项目。
models.py
from django.db.models import Model
class Item(Model):
# your model fields
views.py
def list_view(request):
items = Item.objects.all()
context = 'items': items
return render(request, 'list_template.html', context)
def details_view(request, item_id):
item = Item.objects.get(id=item_id)
context = 'item': item
return render(request, 'details_template.html', context)
urls.py
urlpatterns = [
url(r'^/list/$', views.list_view, name='list')
url(r'^/details/(?P<item_id>[0-9]+)/$', views.details_view, name='details'),
]
list_template.html
<!-- your html -->
<ul>
% for item in items %
<li>
<a href="% url 'details' item.id %">item number item.id </a>
</li>
% endfor %
</ul>
<!-- your html -->
% url ... %
标记为名为“details”的模式生成绝对 url,并用函数参数替换部分地址。在地址中,您将拥有项目 ID,而不是 (?P<item_id>[0-9]+)
。 /details/1/
。当您单击该链接时,数字 1
会被正则表达式抓取并传递给函数参数,您可以在其中从数据库中获取您的项目。
【讨论】:
感谢@warownia1 的帮助。我实际上想要做的是我有一个项目列表,每个项目上都有一个<a>
标签。单击任何项目时,我需要重定向到“详细信息”页面,其中详细信息特定于特定项目。我需要把这个项目传递下去。有什么建议吗?
您不能使用 GET 请求传递 python 对象,但您可以传递项目 id 或名称并在详细信息视图中重建项目或从数据库中获取它。是你的意思吗?
@warownia1 我刚刚在 *** 聊天中帮助了 Venu,并且几乎给出了您在编辑中输入的确切答案。为了避免重复,我要求她将您的答案标记为正确答案:)
好的,太好了。顺便说一句,我不知道 *** 确实有聊天:p 请将答案标记为正确并关闭主题。
这对我来说也是新闻,当 cmets 的数量太大时它会弹出 :)以上是关于Django 从一个页面重定向到另一个页面的主要内容,如果未能解决你的问题,请参考以下文章