Django 的 HttpResponseRedirect() + reverse() 截断 URL 中的端口号
我在端口 8000 上运行本地开发服务器,因为我的 ISP 阻止了端口 80。问题是在使用时:
return HttpResponseRedirect(reverse('foobar'))
Django(由于某种原因)从 URL 中截断了端口 - 但在模板标签的上下文中解析它没有问题,例如: {% url foobar %}。
由于我试图减少部署到生产服务器所需的手动更改数量,因此我想避免对 URL 进行硬编码。
I run my local development server on port 8000 because my ISP blocks port 80. The problem is when using:
return HttpResponseRedirect(reverse('foobar'))
Django (for some reason) truncates the port from the URL - but it has no problem resolving it in the context of template tags e.g.: {% url foobar %}.
Since I'm attempting to reduce the number of manual changes required to deploy to our production server, I'd like to avoid hardcoding the url.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
reverse()
和{% url %}
不考虑任何域和端口 - 它们只是在路径上操作。因此reverse('foobar')
的结果是 urls.py 中与 'foobar' 匹配的元素 - 例如,/foo/bar/
。所以一定有其他东西正在改变你的 URL——也许是你的浏览器。
reverse()
and{% url %}
don't take any account of the domain and port - they just operate on the path. So the result ofreverse('foobar')
is the element in your urls.py that matches to 'foobar' - for example,/foo/bar/
.So something else must be changing your URL - perhaps your browser.
此时,reverse('foobar') 的计算结果是什么?
是否在站点表中输入了正确的主机:站点端口(管理页面通常为 http:// localhost:8000/admin/sites/site/ 如果启用了管理功能)
您可以使用curl -i 从服务器获取完整的响应吗?
What does reverse('foobar') evaluate to at that point?
Is the correct host:port of the site entered in the sites table (Admin page is usually http://localhost:8000/admin/sites/site/ if admin is enabled)
Can you use curl -i to get the complete response from the server?