Python Django未正确重定向
我的django网站运行于Python Django未正确重定向,python,django,redirect,nginx,Python,Django,Redirect,Nginx,我的django网站运行于http://localhost:8000。我试图将它们重定向回网站的根url,但它无法正常工作。它一直试图将我重定向回http://localhost并删除端口。我做错了什么 from django.shortcuts import redirect class Register(View): def post(self, request): return redirect('/') 这是我的主页/url.py文件: from home.
http://localhost:8000
。我试图将它们重定向回网站的根url,但它无法正常工作。它一直试图将我重定向回http://localhost
并删除端口。我做错了什么
from django.shortcuts import redirect
class Register(View):
def post(self, request):
return redirect('/')
这是我的主页/url.py
文件:
from home.views import (
Index,
Feed,
Search,
Profile,
Register,
Login,
)
urlpatterns = patterns(
'',
url(r'^$', Index.as_view()),
url(r'^feed$', Feed.as_view()),
url(r'^feed$', Feed.as_view()),
url(r'^search$', Search.as_view()),
url(r'^profile$', Profile.as_view()),
url(r'^profile/(?P<id>\d+)/?(.+)$', Profile.as_view()),
url(r'^register$', Register.as_view()),
url(r'^login$', Login.as_view()),
url(r'^login$', 'login', name='login'),
)
FWIW我正在使用vagrant并在虚拟机上运行nginx。我让nginx监听vm中的端口:80,我让本地端口8000转发到vm上的端口:80,然后再路由到vm上的端口:8000。我通过运行
python-B manage.py runserver 8000来启动该站点,我在这里看到了一些问题
你不应该转发8000到任何东西。您应该让nginx监听端口80,然后添加一个指向127.0.0.1:8000的上游服务器,并在该端口上启动runserver。一旦你做到了这一点,你的URL应该都没有一个端口。如果希望链接正常工作,请将Vagrant文件的端口80转发到主机。或者,您可以通过从设置中删除nginx来避免所有这些不愉快
URL模式与查询字符串不匹配URL(r'^profile/(?p\d+)/(.+)$),profile.as_view(),
不会将第二个匹配项作为参数传递。您也有重复的模式
最后,考虑命名你的观点。养成这是一个好习惯。它也有助于重定向
使用传入的主机:
-头中的主机名/端口。我认为您需要配置nginx:发送正确的主机:
-header或修复位置:
-header
试试这样的(来自和)
你的url.py
看起来像什么?@Micah是否返回HttpResponseRedirect(“/”)
工作?没有HttpResponseRedirect(“/”)执行相同的操作。你是否使用内部运行服务器,apache passenger或nginx
或其他与wsgi兼容的服务器?我更新了答案,以包括如何设置这些问题肯定与nginx有关。现在修好了。你能告诉我更多关于“命名你的视图”的意思吗?@Micah-查看文档。
urlpatterns = patterns('',
url(r'^favicon\.ico$', RedirectView.as_view(url="%simg/favicon.ico" % django.conf.settings.STATIC_URL)),
url(r'^', include('home.urls')),
)
server {
listen myhost:80;
server_name myhost;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://myapp:8080;
proxy_redirect http://myapp:8080/ http://myhost/;
}
}