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
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 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:
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:
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.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',
]
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:
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.