在为Django 1.6和1.7设计应用时,处理AppConfig的推荐方法是什么?

8 投票
2 回答
745 浏览
提问于 2025-04-28 01:19

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'

撰写回答