在我的本地计算机上运行Django站点,我是否正确地重定向了我的URL?

时间:2013-09-10 13:20:42

标签: django apache

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

该项目名为" MyProject" 目前我的网址看起来像: 本地主机/ MyProject的/ 本地主机/ MyProject的/登录/ 本地主机/ MyProject的/管理/ 每当我使用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配置为不同的东西?非常感谢。

1 个答案:

答案 0 :(得分:3)

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

urls.py

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

views.py

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

要解决您的问题,您的主urls.py可以包含您的其他项目网址,如下所示,这将在我们所有包含的项目网址之前添加SITE_BASE_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-variables-and-mod_wsgi/