在所有应用中实施网站前缀

时间:2010-01-03 20:18:01

标签: django django-urls

我正在开发Google App Engine上的应用程序,其中一项功能是通过Facebook Connect进行身份验证。我已经设置了一切并且工作到了一定程度,但是为了在我的开发机器上测试它,我在我的一个面向公共服务器上创建了一个反向代理,它代理到开发机器。

除了大部分链接没有我为代理创建的前缀外,一切正常。

所以这让我思考,是否有一种简单的方法来创建一个网站范围的应用前缀,不仅适用于我的应用,还有我想使用的任何第三方应用?

我是否可以包含一些中间件或者我没有读过的Django文档?

**更新:**按照下面的评论,我想到的前缀介于域名和应用网址之间:

http://example.com/PREFIX/myapp/view/

2 个答案:

答案 0 :(得分:2)

myapp的网址设计为独立的(以便其网址可以“包含”在另一个项目的网址中)。

urlpatterns = patterns ('',
    (r'^$', 'myapp.views.index'),
    (r'^view/$', 'myapp.views.view'),
    ...
)

请注意,此时您并未在网址中添加“myapp”,而只是拥有一个基本的URL方案,可以在部署时指向您想要的任何位置。

然后,为每个目标部署创建一个单独的URLconf模块(例如,测试与生产),并使用django.conf.urls.defaults.include function将URL连接到您想要的任意深度基本URL:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^PREFIX/myapp/', include('myapp.urls')),
    (r'^PREFIX/myapp2/', include('myapp2.urls')),
    (r'^PREFIX/myapp3/', include('myapp3.urls')),    
)

将部署settings.py指向使用此URLconf模块,而不是直接指向myapp的URL模块。

因为我的测试环境看起来与我的生产环境完全不同,所以我希望为每个目标部署设置一个单独的设置模块。

答案 1 :(得分:0)

如果您的前缀在域名中,为什么不使用root-relative网址?

我总是使用这种非常方便的网址

<a href="/myapp/view">blex</a>
<img src="/static/img/blex.png"/>

希望这会有所帮助。