Python 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.

我的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.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/;
      }
    }