获取应用程序的Django版本

19 投票
6 回答
5139 浏览
提问于 2025-04-16 20:34

我正在开始一个新的(其实是很老的)项目,我知道这个项目是用Django做的。但是我不知道它到底是用哪个版本的Django来构建的。有没有什么方法可以让我知道我的应用程序正在运行的Django版本呢?

6 个回答

7

我看到上面接受的答案,我觉得这个方法简单多了。也许我漏掉了什么,但我会这样做。

打开一个Python终端,确保你的Django项目在路径中。

$ python
>>> import django
>>> print django.get_version()
0.97-pre-SVN-7668

这个版本号只是用来举例的。你的版本可能会不一样,希望如此。

11

你可以通过查看settings.py的结构来猜测一些信息。第一个提示来自于数据库设置。在Django 1.2之前,旧的写法是:

DATABASE_ENGINE = 'sqlite3'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = os.path.join(BASE_DIR, 'db')             # Or path to database file if using sqlite3.
#DATABASE_USER = ''             # Not used with sqlite3.
#DATABASE_PASSWORD = ''         # Not used with sqlite3.
#DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
#DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.

这种写法在1.3版本中仍然被支持,但现在会让Django发出很大的警告,告诉你这个写法已经过时了。

从Django 1.2开始,使用的格式是:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(PROJECT_DIR, 'mycms.db'),
    }
}

虽然这不是绝对的,但至少可以给你一个提示,看看你的应用是写在Django 1.2之前还是之后。

需要记住的是,针对旧版本Django写的应用仍然可以运行,但如果你的代码引用了一些已经过时或移动了的内容,你可能会在控制台看到很多过时警告。

这些警告在短期内通常可以安全忽略,但你确实应该花时间去消除它们,更新你的代码以引用新位置或新格式的功能。Django的开发者在这方面做得很好,会给出足够的时间和警告,让旧功能能够顺利迁移。

19

唯一的方法就是猜测。我建议你先查看一下settings.py文件(或者其他基础项目文件)的创建日期。

各个版本的发布时间:

  • 1.0: 2008年9月。(?)
  • 1.1: 2009年7月29日 [1]
  • 1.2: 2010年5月17日 [2]
  • 1.3: 2011年3月23日 [3]

如果你的urls.py文件中有:[4]

from django.conf.urls.defaults import *
from django.contrib import admin

或者在某个应用里有一个admin.py文件 [5],这就说明这个项目是1.0以上的版本。

如果你的urls.py文件中有:[6]

(r'^admin/', include(admin.site.urls)),

那么这就说明是1.1以上的版本。

如果你的settings.py文件中有:

DATABASES = {
    'default': {
        'NAME': 'app_data',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'postgres_user',
        'PASSWORD': 's3krit'
    },
    'users': {
        'NAME': 'user_data',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'priv4te'
    }
}

那么这就说明是1.2以上的版本。

[1]: 1.1版本说明

[2]: 1.2版本说明

[3]: 1.3版本说明

[4]: 不兼容的变更 0.96 > 1.0

[5]: 不兼容的变更 0.96 > 1.0

[6]: 多个数据库

撰写回答