通常我会用.htaccess
来做,但是django没有它。
那么最好的方法是什么?从www.olddomain.com重定向到www.newdomain.com的代码是什么?
注意:我们不使用Apache,而是使用Gunicorn
感谢名单!
答案 0 :(得分:5)
执行此操作的最佳方法仍然是使用Web服务器而不是Django。这比使用Django更快更有效。
查看this question了解详情。
更新
如果您真的想在django中进行操作,请编辑您的网址配置文件(管理django's url dispatcher)以在顶部包含以下内容 -
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^.*$', redirect_to, {'url': 'http://www.newdomain.com'}),
)
有关详细信息,请查看documentation。
答案 1 :(得分:2)
import urlparse
from django.http import HttpResponseRedirect
domain = request.GET['domain']
destination = reverse('variable_response',args=['Successful'])
full_address = urlparse.urljoin(domain, destination)
return HttpResponseRedirect(full_address)
答案 2 :(得分:0)
我最终使用heroku和旋转1个web dyno(这是免费的)来做它。
#views.py
def redirect(request):
return render_to_response('redirect.html')
#redirect.html
<html>
<head>
<title>Blah</title>
<meta http-equiv="refresh" content="1;url=http://www.example.com">
</head>
<body>
<p>
Redirecting to our main site. If you're not redirected within a couple of seconds, click here:<br />
<a href="http://www.example.com">example.com</a>
</p>
</body>
</html>
这很简单。可以找到相同的示例here。
答案 3 :(得分:0)
更新为Python 3的catherine答案的替代方案是:
from django.contrib.sites.shortcuts import get_current_site
from urllib.parse import urljoin
from django.http import HttpResponseRedirect
NEW_DOMAIN = 'www.newdomain.com'
加入每个view
:
def myView(request, my_id):
if request.META['HTTP_HOST'] != NEW_DOMAIN:
# remove the args if not needed
destination = reverse('url_tag', args=[my_id])
full_address = urljoin(DOMAIN, str(destination))
return HttpResponseRedirect(full_address)
# your view here
url_tag
是urlpatterns
中定义的那个。
答案 4 :(得分:0)
我有同样的问题,所以我写了这个,它对我来说很完美,也许其他人也需要它:
urlpatterns += [ # redirect to media server with same path
url(r'^media/', redirectMedia),
]
并使用此功能重定向:
from urllib.request import urlopen
from django.http import HttpResponse
def redirectMedia(request):
x = urlopen("http://www.newdomain.com" + request.path)
return HttpResponse(x.read())
享受吧!
答案 5 :(得分:0)
对于 Django >= 2.0
,更简单的解决方案是使用 RedirectView
例如在 urls.py
中:
from django.views.generic.base import RedirectView
urlpatterns = [
path('my_ext_uri', RedirectView.as_view(url='https://YOUR_EXTERNAL_URL')),
]
[旁注]
正如 Aidan 的回答中提到的,最好重定向将由 Web 服务器网关上的不同服务处理的请求,而不是(Python/Django)应用程序服务器。