Как работает соглашение об именах для Django INSTALLED_APPS?
В учебнике на сайте создается приложение с именами опросов. Он использует django 1.9, поэтому в INSTALLED_APPS его
polls.apps.PollsConfig
Я смотрю учебник, который он называет информационным бюллетенем приложения, а в INSTALLED_APPS у него
newsletter
он использует 1.8. Я использую 1.9. Я смотрел другие уроки, и они также просто добавляли имя без точек в синтаксисе, как он. Я понимаю, что все может быть по-другому. Быть ясным, если я назвал свои приложения собаками. в установленных приложениях он будет называться как
dogs.apps.DogsConfig
или если это дерево, это будет
tree.apps.TreeConfig
Это как правило именования? также я бы предположил, что все будет короче в более новых версиях и более удобно. поэтому перейти от простого добавления
newsletter,
чтобы напечатать
polls.apps.PollsConfig
кажется мне странным. Но я новичок, поэтому, возможно, что-то не хватает. Любые советы приветствуются
Ответы
Ответ 1
Это функция Конфигурация приложения, новая для Django 1.7.
В принципе, теперь вы можете указать в 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'
Итак, добавив его в запрос OP:
Ответ 2
В setup.py, под Установленные приложения просто добавьте app_name
как
INSTALLED_APPS = [
'polls', # <--- here
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Ответ 3
Если вы используете базовый метод HttpResponse для возврата своего вида, вы можете уйти с именем в ваших settings.py, а на самом деле с помощью простого HTTP-ответа, я думаю, вам нужно всего лишь добавить соответствующее регулярное выражение в свои URL-адреса .py(mysite):
INSTALLED_APPS = [
'polls',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Из url.py в корневом сайте:
urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', admin.site.urls),
]
В вашем приложении опросов есть следующее:
from django.apps import AppConfig
Класс Config находится в файле /apps.py, поэтому его пунктирный путь равен "polls.apps.PollsConfig", что означает, что вам необходимо включить его в свой основной urls.py как таковой:
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
На этом этапе я предполагаю, что вы собираетесь выполнять миграции.
Ответ 4
Пока я искал такую константу INSTALLED_APPS, как вы, я видел это объяснение в документах:
Список строк, обозначающих все приложения, которые включены в этой установке 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'
Почему первый предпочтительнее? Потому что я думаю о том, что это явно.