在为Django 1.6和1.7设计应用时,处理AppConfig的推荐方法是什么?
Django 1.7 引入了一种新的应用配置处理方式,这种方式和 models.py
文件没有关系。不过,使用新的 AppConfig
的方法需要加上这一行代码:
from django.apps import AppConfig
可惜的是,这在 Django 1.6 中会出问题,因为那时候没有 apps
模块。
那么,是否可以通过条件导入的方式让一个应用同时兼容 1.6 和 1.7,还是说必须分开写代码? 如果可以的话,有没有推荐的指南,最好是 Django 开发者提供的,教我们怎么做?
2 个回答
9
我不太确定官方推荐的做法是什么,但我会这样做:
# 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
。如果你的Django版本低于1.7,那么 myapp/apps.py
这个模块就会被忽略,程序的运行效果和之前一样。
4
如果你的 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'