0

我正在本地 Windows 7 机器上使用 Bitnami DjangoStack(包括 django、apache 和 mySQL)构建 django 网站。

该项目称为“MyProject” 目前我的网址如下所示:localhost/MyProject/ localhost/MyProject/login/ localhost/MyProject/admin/ 等。每当我使用 HttpResponseRedirect('/login/') 重定向时(这就是我一直在看的教程表明我应该这样做)我最终在“localhost/login”上不起作用,所以为了纠正这个问题,我一直在使用 HttpResponseRedirect('/MyProject/login/') 代替,它确实有效。

我希望我完成的项目在“ http://www.MyProject.com ”上,并且有像 www.MyProject.com/login 这样的页面,但我似乎配置它的方式最终会是“www.SomeDomain” .com/MyProject/login”。HttpResponseRedirect('/MyProject/login/') 对我想做的事情有效,还是应该将我的 settings.py 配置为不同的东西?非常感谢。

4

1 回答 1

3

首先,你不应该在 Django 代码中硬编码 url 字符串(既不是模板也不是视图),而是使用Django URL Dispatcher

网址.py

urlpatterns = patterns('',
    #...
    url(r'^articles/(\d{4})/$', 'news.views.year_archive'),
    #...
)

视图.py

return HttpResponseRedirect(reverse('news.views.year_archive', args=(year,)))

为了解决您的问题,您的主要 urls.py 可以包装您的其他项目 url,如下所示,这会将 SITE_BASE_URL 添加到我们所有包含的项目 url。

SITE_BASE_URL = '/MyProject/' 
urlpatterns = patterns('',
    # ... snip ...
    url(r'{site_base}'.format(site_base=SITE_BASE_URL), include('project.urls')),
    # ... snip ...
)

现在您可以简单地使“SITE_BASE_URL”环境特定。您可以使用设置文件(可以为生产或本地环境保持不同)或将其作为 Apache 本身的环境变量传递,参考:http ://drumcoder.co.uk/blog/2010/nov/12/apache-environment-变量和 mod_wsgi/

于 2013-09-10T14:07:42.640 回答