假设我在Django中有一个名为“devsite”的项目,它将首先部署到一个临时项目(也称为“devsite”),最后部署到实时代码库(项目称为“livesite”)。在实时部署期间,我必须手动更改urls.py才能从正确的项目中导入视图。这意味着“devsite”中的urls.py会使用类似的内容:
from devsite import views
“livesite”的urls.py将更改为:
from livesite import views
以下似乎有效(到目前为止测试有限)。我所做的是在settings.py中创建一个变量来从目录中获取项目名称,如下所示:
settings.py
# /settings.py
import os.path
PROJECT_NAME = os.path.basename(os.path.dirname(__file__))
然后使用它在urls.py中导入正确的视图:
urls.py
# /urls.py
from django.conf import settings
website = __import__('%s' % settings.PROJECT_NAME, fromlist=['views'])
...
urlpatterns = patterns('',
(r'^monty/$', website.views.monty),
)
我想知道的是:
提前致谢。
答案 0 :(得分:1)
看看zc.buildout和djangorecipe - 正如Jacob Kaplan-Moss所说,
...is an exceedingly civilized way to develop an app
http://jacobian.org/writing/django-apps-with-buildout/
除了一般的“文明性”之外,djangorecipe还允许您拥有多个可以相互导入的设置文件。然后您可以指定在特定安装中使用哪个设置文件。
development.py
from settings import *
DEBUG = True
live.py
from settings import *
DEBUG = False
......这只是冰山一角
答案 1 :(得分:0)
我会质疑为什么你的live和dev网站有不同的项目。为什么不将所有差异保持在设置/配置之下(例如,与PROJECT_NAME
一样),但保持项目的共同点?看起来你只会增加开发和生活之间出错的几率,你每个站点的差异就越大。
除此之外,我认为你所做的事情或多或少都很好。我见过的另一种模式是:
try:
from livesite import views
except ImportError:
from devsite import views