web-dev-qa-db-fra.com

Confus avec la convention de nommage de Django INSTALLED_APPS

Le tutoriel sur le site crée une application nommée sondages. Il utilise Django 1.9, de sorte que, dans INSTALLED_APPS, son

polls.apps.PollsConfig

Je regarde un tutoriel, il nomme la newsletter de l'application et il a dans INSTALLED_APPS

newsletter

il utilise 1.8, cependant. J'utilise 1.9. J'ai regardé d'autres tutoriels et ils ajoutent simplement un nom sans points dans la syntaxe, comme il le fait. Je réalise que les choses peuvent être différentes, c'est compris. Pour être clair si j'ai nommé mes chiens de l'application ,. dans les applications installées, il serait nommé comme ceci

dogs.apps.DogsConfig

ou si c'était un arbre ce serait

tree.apps.TreeConfig

Est-ce ainsi que la convention de nommage va? Je suppose aussi que les choses seraient plus courtes et plus pratiques dans les nouvelles versions. afin d'aller juste d'ajouter

newsletter,

avoir à taper

polls.apps.PollsConfig

me semble bizarre. Mais je suis nouveau donc je manque peut-être quelque chose. Tous les conseils sont les bienvenus

21
losee

C’est la fonctionnalité Configuration de l’application , nouvelle pour Django 1.7.

Fondamentalement, vous pouvez désormais répertorier dans INSTALLED_APPS le module contenant l'application ou une classe dérivée de Django.apps.AppConfig et définissant le comportement de l'application.

Cette fonctionnalité offre plusieurs avantages:

  • Les applications peuvent être configurées plus facilement et même sous-classées pour personnalisation.
  • Vous pouvez avoir plusieurs applications dans le même module.

Les modules d'application peuvent définir la variable de module spéciale default_app_config afin de spécifier le nom de leur AppConfig, afin qu'ils puissent utiliser les nouvelles fonctionnalités sans avoir à spécifier le nom complet de cette classe dans INSTALLED_APPS. Il s'agit toutefois d'une fonctionnalité de compatibilité ascendante et il est recommandé aux nouvelles applications d'écrire le nom complet AppConfig.

Quoi qu'il en soit, la plupart des applications Django/contrib utilisent ce default_app_config pour assurer la compatibilité avec les anciennes configurations. Voir par exemple le fichier Django/contrib/messages/__init__.py est juste:

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

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

Donc, en additionnant chaque demande OP:

  • Si vous ajoutez dans INSTALLED_APPS le nom de type foo.apps.FooConfig, cette classe sera utilisée pour configurer l'application foo, style 1.7 (recommandé).
  • Si vous ajoutez dans INSTALLED_APPS le nom en clair foo, alors:

    • s'il existe une variable foo.default_app_config, cette classe sera utilisée pour configurer le style foo app, 1.7. La plupart (toutes?) Des applications Django standard ont cette variable, de sorte que vous n'avez pas besoin de changer votre INSTALLED_APPS lors de la mise à niveau de Django-1.6 vers Django-1.7.
    • s'il n'y a pas une telle variable, l'application de style 1.6 sera utilisée, avec les valeurs par défaut pour les options de configuration avancées.
25
rodrigo

Dans le fichier setup.py, sous les applications installées, ajoutez simplement app_name comme

INSTALLED_APPS = [
    *'polls',*
    'Django.contrib.admin',
    'Django.contrib.auth',
    'Django.contrib.contenttypes',
    'Django.contrib.sessions',
    'Django.contrib.messages',
    'Django.contrib.staticfiles',
]
1
Pom Skipper

Pendant que je cherchais sur INSTALLED_APPS constant comme vous, j'ai vu cette explication dans des documents:

Liste de chaînes désignant toutes les applications activées dans cette installation de Django. Chaque chaîne doit être un chemin Python en pointillé pour:

  • une classe de configuration d'application (préférée), ou
  • un paquet contenant une application.

La deuxième puce explique que vous pouvez utiliser votre dossier d’application pour résoudre automatiquement les paramètres existants. La première option peut également être utilisée pour activer votre application. Mais le plus important, c’est qu’il soit préféré.

Si vous voulez aller avec le premier préféré, vous devez créer app.py dans votre nouveau dossier d’application, puis définir comme suit:

# 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'

Pourquoi le premier est préféré? Parce que j'y pense, c'est explicite.

0
vildhjarta