Django安装的应用程序的名称约定是如何工作的?

2024-04-24 00:09:10 发布

您现在位置:Python中文网/ 问答频道 /正文

网站上的教程创建了一个名为polls的应用程序。它使用的是django 1.9,所以在安装的应用程序中

polls.apps.PollsConfig

我正在看一个教程,他给这个应用程序命名为时事通讯,在他安装的应用程序中

newsletter

不过,他用的是1.8。我用的是1.9。我看过其他教程,他们也只是在语法中添加了一个没有点的名字。我知道事情可能不同,这是明白的。如果我给我的应用程序命名为dogs,请澄清,。在已安装的应用程序中,其名称如下

dogs.apps.DogsConfig

如果是树的话

tree.apps.TreeConfig

命名约定就是这样的吗?另外,我认为在较新的版本中,事情会变得更短,更方便。所以从增加

newsletter,

不得不打字

polls.apps.PollsConfig

我觉得很奇怪。但我是新来的,所以我可能漏掉了一些东西。欢迎任何建议


Tags: appsdjango名称应用程序网站语法教程名字
3条回答

在setup.py中,在已安装的应用程序下只需添加app_namelike

INSTALLED_APPS = [
    'polls', # <--- here
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

这是Django 1.7的新特性Application Configuration

基本上,现在可以在INSTALLED_APPS中列出包含应用程序的模块或从django.apps.AppConfig派生并定义应用程序行为的类。

此功能提供了几个优点:

  • 可以更容易地配置应用程序,甚至可以为自定义设置子类。
  • 在同一个模块中可以有多个应用程序。

应用程序模块可以定义特殊的模块变量default_app_config,以指定其AppConfig的名称,这样它们就可以使用新功能,而不必在INSTALLED_APPS中指定该类的全名。但这是一个向后兼容特性,建议新应用程序编写完整的AppConfig名称。

无论如何,大多数django/contrib应用程序都使用这个default_app_config,以与旧配置兼容。例如,请参见文件django/contrib/messages/__init__.py只是:

from django.contrib.messages.api import *
from django.contrib.messages.constants import *

default_app_config = 'django.contrib.messages.apps.MessagesConfig'

因此,根据操作请求将其相加:

  • 如果添加类型名INSTALLED_APPS,则该类将用于设置1.7样式的foo应用程序(推荐)。
  • 如果添加INSTALLED_APPS纯名称foo,则:

    • 如果有变量foo.default_app_config,这个类将用于设置foo应用程序,1.7样式。大部分(全部?)标准的Django应用程序有这个变量,因此当您从Django-1.6升级到Django-1.7时,不需要更改您的INSTALLED_APPS
    • 如果没有这样的变量,那么将使用1.6样式的应用程序,其中包含高级配置选项的默认值。

当我像您一样搜索已安装的应用程序时,我在文档中看到了以下解释:

指定在此Django安装中启用的所有应用程序的字符串列表。每个字符串都应该是指向以下位置的点式Python路径:

  • 应用程序配置类(首选),或
  • 包含应用程序的包。

第二个要点是说明可以使用应用程序文件夹自动解析现有设置。第一个选项也可用于激活应用程序。但最重要的是它是首选的。

如果要先使用首选项,则必须在新应用程序文件夹中创建app.py,然后按如下方式设置:

# my_new_app/apps.py
from django.apps import AppConfig

class MyNewAppConfig(AppConfig):
    name = 'my_new_app'
    verbose_name = "My Brand New Application"

# my_new_app/__init__.py
default_app_config = 'my_new_app.apps.MyNewAppConfig'

为什么首选第一个?因为我认为它是明确的。

相关问题 更多 >