在为 Django 1.6 和 1.7 设计应用程序时,是不是有推荐的处理 AppConfig 的方法?
Posted
技术标签:
【中文标题】在为 Django 1.6 和 1.7 设计应用程序时,是不是有推荐的处理 AppConfig 的方法?【英文标题】:Is there a recommended approach for handling AppConfig when designing an app for Django 1.6 and 1.7?在为 Django 1.6 和 1.7 设计应用程序时,是否有推荐的处理 AppConfig 的方法? 【发布时间】:2014-12-12 12:25:40 【问题描述】:Django 1.7 具有独立于 models.py
的 introduced a new way for handling application configuration。但是使用新的AppConfig
的方法需要这一行:
from django.apps import AppConfig
不幸的是,这将在 Django 1.6 中中断,因为没有 apps
模块。
是否有可能使用条件导入让应用与 1.6 和 1.7 兼容,还是拆分代码库的问题?如果可以,是否有推荐指南,最好来自Django 开发者如何做到这一点?
【问题讨论】:
我不知道你是否会得到官方指南或推荐,但你是否尝试过,也许,只是将 1.7 中的apps
模块添加到你的 Django 1.6 项目中并尝试手动集成它?我敢肯定会有一些粗糙的边缘,但它仍然是最近添加的,所以它不能把事情分解太多。另外,它只有two files,所以它不可能很多工作,不是吗?
【参考方案1】:
我不确定 django 官方建议的方式,但我会这样做:
# myapp/apps.py
try:
from django.apps import AppConfig
except ImportError:
AppConfig = object
class MyAppConfig(AppConfig):
# put all the necessary stuff for AppConfig
# myapp/__init__.py
default_app_config = 'myapp.apps.MyAppConfig'
这样,如果它是 django>=1.7,它将使用这个 MyAppConfig
,否则 myapp/apps.py
模块将被简单地忽略,并且它将与以前的 django 一样工作
【讨论】:
【参考方案2】:仅当 django 版本 >= 1.7 时才使用 AppConfig 怎么样(在 __ init __.py 文件中也要考虑到这一点):
# myapp/apps.py
from django import VERSION as DJANGO_VERSION
if DJANGO_VERSION >= (1, 7):
from django.apps import AppConfig
class MyAppConfig(AppConfig):
...
# myapp/__init__.py
from django import VERSION as DJANGO_VERSION
if DJANGO_VERSION >= (1, 7):
default_app_config = 'myapp.apps.MyAppConfig'
【讨论】:
我试了一下,它似乎工作正常。我选择它是因为我更喜欢显式检查而不是异常。以上是关于在为 Django 1.6 和 1.7 设计应用程序时,是不是有推荐的处理 AppConfig 的方法?的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse Eclipse 在 1.6 下运行,但需要 1.7
从 Tomcat 6 JDK 1.6 迁移到 Tomcat 7 JDK 1.7 会话问题