Подтвердить что ты не робот

Как работает соглашение об именах для 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

кажется мне странным. Но я новичок, поэтому, возможно, что-то не хватает. Любые советы приветствуются

4b9b3361

Ответ 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:

  • Если вы добавите в INSTALLED_APPS имя_файла foo.apps.FooConfig, то этот класс будет использоваться для настройки стиля foo, стиля 1.7 (рекомендуется).
  • Если вы добавили в INSTALLED_APPS простое имя foo, то:

    • если есть переменная foo.default_app_config, этот класс будет использоваться для настройки стиля foo, стиля 1.7. Большинство (все?) Стандартных приложений Django имеют эту переменную, поэтому вам не нужно менять свой INSTALLED_APPS при обновлении с Django-1.6 до Django-1.7.
    • Если такой переменной нет, тогда будет использовано приложение стиля 1,6 с значениями по умолчанию для расширенных параметров конфигурации.

Ответ 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'

Почему первый предпочтительнее? Потому что я думаю о том, что это явно.