将所有内容放在URL中的(子)路径上

时间:2012-01-08 20:03:38

标签: django url

我希望我的整个Django项目位于域上的(子)路径foo上。


localhost:8000/foo/admin代替localhost:8000/admin

localhost:8000/foo/myapp/,而不是localhost:8000/myapp



我看到三个部分:

1)更改网址分派。例如。 /foo/admin,应指向正确的观点。

2)更正模板中的链接(到css,其他页面等)。例如。管理员应用的模板应指向/foo/static/admin/css/base.css,而不是通常的/static/admin/css/base.css

3)所有静态内容也必须为/foo。例如管理员应用的样式表应位于/foo/static/admin/css/base.css,而不是通常的/static/admin/css/base.css。



有没有一种优雅的方法来实现这一目标?

3 个答案:

答案 0 :(得分:1)

只需在/foo安装您的WSGI应用,然后将STATIC_URL和/或MEDIA_URL设置为yourdomain.com/foo

答案 1 :(得分:1)

关于使用mod_python的假设,请阅读有关在Apache配置文件中使用SetEnv设置'django.root'的Django文档。

https://docs.djangoproject.com/en/1.3/howto/deployment/modpython/

使用该集合,您不需要将挂载点添加到urls.py中的模式中。

您仍然需要设置STATIC_URL和MEDIA_URL以包含Daniel指示的前缀。

请注意,mod_python已经死亡,Django中的支持已弃用,并且目标是删除。如果使用Apache,则应考虑转而使用mod_wsgi。

答案 2 :(得分:0)

我会尝试以下(未经测试的)方法:

  1. 在您的顶级urls.py文件中有一个如下所示的模式:

      

    urlpatterns = patterns('', (r'^foo/', include('main_urls.py'))

  2. 然后在main_urls.py中拥有所有正常模式。 main_urls.py中的所有内容都可以在/foo/下访问,而不是在/下访问。