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的?使用reversereverse_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&lt;item_id&gt;[0-9]+)/details/1/。当您单击该链接时,数字 1 会被正则表达式抓取并传递给函数参数,您可以在其中从数据库中获取您的项目。

【讨论】:

感谢@warownia1 的帮助。我实际上想要做的是我有一个项目列表,每个项目上都有一个&lt;a&gt; 标签。单击任何项​​目时,我需要重定向到“详细信息”页面,其中详细信息特定于特定项目。我需要把这个项目传递下去。有什么建议吗? 您不能使用 GET 请求传递 python 对象,但您可以传递项目 id 或名称并在详细信息视图中重建项目或从数据库中获取它。是你的意思吗? @warownia1 我刚刚在 *** 聊天中帮助了 Venu,并且几乎给出了您在编辑中输入的确切答案。为了避免重复,我要求她将您的答案标记为正确答案:) 好的,太好了。顺便说一句,我不知道 *** 确实有聊天:p 请将答案标记为正确并关闭主题。 这对我来说也是新闻,当 cmets 的数量太大时它会弹出 :)

以上是关于Django 从一个页面重定向到另一个页面的主要内容,如果未能解决你的问题,请参考以下文章

Django 使用绑定表单重定向到另一个视图

django 重定向

django 1.10 一个带有链接的应用页面重定向到另一个应用页面

为啥我的代码不会从一个 html 页面重定向到另一个页面?

在 React 中从一个页面重定向到另一个页面

使用 Django CBV 模型重定向后的白色 HTML 页面