该网站上的教程创建了一个名为Polls的应用程序.它使用的是Django 1.9,因此在installed_apps中是:

polls.apps.PollsConfig

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

newsletter

不过,他用的是1.8.我用的是1.9.我看过其他教程,他们也像他一样在语法中添加了一个不带点的名字.我知道事情可能会有所不同,这是可以理解的.为了清楚起见,我是否将我的应用程序命名为狗.在已安装的应用程序中,它的名称如下所示

dogs.apps.DogsConfig

或者如果它是一棵树

tree.apps.TreeConfig

这就是命名惯例吗?另外,我认为在更新的版本中,事情会变得更短,更方便.所以从仅仅添加

newsletter,

不得不打字

polls.apps.PollsConfig

我觉得很奇怪.但是我是新来的,所以我可能错过了什么.欢迎任何建议.

推荐答案

这是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中添加TypeNamefoo.apps.FooConfig,则该类将用于设置foo应用程序,1.7样式(推荐).
  • 如果在INSTALLED_APPS中添加普通名称foo,则:

    • 如果有一个变量foo.default_app_config,这个类将用于设置foo应用程序,1.7样式.大部分(全部?)标准的Django应用程序有这个变量,所以当你从Django-1.6升级到Django-1.7时,你不需要更改INSTALLED_APPS.
    • 如果没有这样的变量,则将使用1.6样式的应用程序,高级配置选项使用默认值.

Django相关问答推荐

如果密码在Django中未被散列,则对其进行散列

按下按钮刷新在html文件中显示的变量

从url参数过滤的Django日期范围返回空查询集

自定义身份验证 django

`.objects` 属性在哪里添加到 Django 的 models.Model 类中的实例命名空间?

访问默认的 django-allauth 登录和注册页面时出现 TemplateSyntaxError

Django Rest Framework 速率限制动态基于用户类型

Django 仅预取相关模型的最新对象

Django REST Framework如何在序列化程序中引发验证错误时指定错误代码

PyCharm:强制 Django 模板语法突出显示

在 Django 的 ORM 中访问存储过程的最佳方法是什么

使用 scrapy 访问 Django 模型:定义 Django 元素的路径

始终将用户包含在 django 模板上下文中

如何验证对象是否存在于多线程中

AngularJS + Django Rest Framework + CORS(CSRF Coo​​kie 没有出现在客户端)

django post_save 更新信号

从 django/python 中的 request.POST 检索列表项

django-rest-framework 接受 JSON 数据?

Django:必须使用对象 pk 或 slug 调用通用详细视图

如何从 django 请求中获取完整的 url