Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
360 views
in Technique[技术] by (71.8m points)

python - How does it work, the naming convention for Django INSTALLED_APPS?

The tutorial on the site creates an app named polls. It's using django 1.9, so in the INSTALLED_APPS it is:

polls.apps.PollsConfig

I'm watching a tutorial he names the app newsletter and in INSTALLED_APPS he has

newsletter

he's using 1.8, though. I am using 1.9. I've watched other tutorials and they also just add a name without dots in the syntax as he does. I realize things may be different, that's understood. To be clear if I named my app dogs,. in the installed apps it would be named like this

dogs.apps.DogsConfig

or if it was tree it would be

tree.apps.TreeConfig

Is that how the naming convention goes? also I would assume things would get shorter in newer versions and more convenient. so to go from just adding

newsletter,

to having to type out

polls.apps.PollsConfig

seems weird to me. But I'm new so I maybe missing something. Any and all advice is welcome

question from:https://stackoverflow.com/questions/34377237/how-does-it-work-the-naming-convention-for-django-installed-apps

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

That is the Application Configuration feature, new to Django 1.7.

Basically, now you can list in INSTALLED_APPS either the module that contains the application or a class that derives from django.apps.AppConfig and defines the behavior of the application.

This feature provides several advantages:

  • Apps can be configured more easily, and even subclassed for customization.
  • You can have several apps in the same module.

Application modules can define the special module variable default_app_config to specify the name of their AppConfig, so that they can use the new features without having to specify the full name of that class in INSTALLED_APPS. But this is a backwards compatibility feature and new applications are recommended to write the full AppConfig name.

Anyway, most django/contrib apps use that default_app_config, for compatibility with old configurations. See for example the file django/contrib/messages/__init__.py is just:

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

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

So, adding it up, per OP request:

  • If you add in INSTALLED_APPS the typename foo.apps.FooConfig, then that class will be used to setup the foo app, 1.7 style (recommended).
  • If you add in INSTALLED_APPS the plain name foo, then:

    • if there is a variable foo.default_app_config this class will be used to setup the foo app, 1.7 style. Most (all?) the standard Django apps have this variable, so that you don't need to change your INSTALLED_APPS when you upgrade from Django-1.6 to Django-1.7.
    • if there is not such a variable, then the 1.6 style application will be used, with default values for the advanced configuration options.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...