我正在Django开展一个项目,我在点击链接时从一个页面重定向到另一个页面时遇到了问题。无论我尝试过什么,我最终都会有一个网址:
localhost:8080/page1/page2
而不是从localhost:8080/page1
转移到localhost:8080/page2
我已尝试使用HttpResponseRedirect(url)
答案 0 :(得分:5)
推荐的方法是在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 ... %}
标记生成名为&#34的模式的绝对URL;详细信息&#34;并用函数参数替换部分地址。在地址中,您将拥有项目ID,而不是(?P<item_id>[0-9]+)
,而不是/details/1/
。 1
。当您单击链接时,正则表达式会抓取数字$stateParams
并传递给函数参数,您可以从数据库中获取项目。