Django 从一个页面重定向到另一个页面

问题描述 投票:0回答:2

我正在 Django 中开发一个项目,在单击链接从一个页面重定向到另一个页面时遇到问题。无论我尝试了什么,我最终都会得到一个像这样的网址:

localhost:8080/page1/page2

而不是从

localhost:8080/page1
移动到
localhost:8080/page2

我尝试过使用

HttpResponseRedirect(url)

django http-redirect
2个回答
5
投票

推荐的方法是在django模板中使用

{% url 'url-name' arg1 arg2 kwarg='foo' %}
。 您不应该在模板中硬编码 url,而应使用 url 名称。
更多详细信息:https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#url

Python 代码中的等效项是

django.utls.reverse
,它返回绝对 url 或
django.shortcuts.redirect
,它相当于
HttpResponseRedirect(reverse('url_name'))

https://docs.djangoproject.com/en/1.10/ref/urlresolvers/#django.urls.reverse

编辑#1

使用数据库在视图之间传递项目。

模型.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
并将其传递给函数参数,您可以在其中从数据库中获取项目。


0
投票

我也遇到了同样的问题,但我花了很长时间才弄清楚它来自哪里。我发现在 url 包含之前,基本 HTML 文件的 href 中缺少一个“/”。

http://127.0.0.1:8000/loans/personal/ http://127.0.0.1:8000/loans/personal/loans/business/ http://127.0.0.1:8000/loans/个人/贷款/商业/贷款/黄金/

© www.soinside.com 2019 - 2024. All rights reserved.