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

Переопределение AppConfig.ready()

Django 1.9.6.

Попытка поймать основы Django. А именно, как работают приложения. Документы: https://docs.djangoproject.com/en/1.9/ref/applications/#methods

И в коде класса AppConfig мы можем прочитать:

def ready(self):
    """
    Override this method in subclasses to run code when Django starts.
    """

Ну, это мой пример:

my_app/apps.py

class MyAppConfig(AppConfig):
    name = 'my_app'

    def ready(self):
        print('My app')

Я просто хочу сделать готовую работу метода. То есть, когда Django находит my_app, пусть он запускает готовый метод.

Приложение зарегистрировано в INSTALLED_APPS.

Я запускаю 'python manage.py runningerver'. И ничего не печатается.

Если я помещаю точку останова в готовый метод, отладчик не останавливается на этом.

Не могли бы вы помочь мне: какая моя ошибка в понимании здесь. Заранее благодарю вас.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'my_app',
]

И я создал представление

my_app/views.py

def index(request):
    print('Print index')

urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', my_app_views.index, name='home')
]

Ну, представление работает. Это означает, что приложение зарегистрировано.

4b9b3361

Ответ 1

Вам нужно сделать одну из двух вещей. Или прямо укажите, какой AppConfig вы хотите в INSTALLED_APPS:

INSTALLED_APPS = [
    'my_app.apps.MyAppConfig'
]

Или, определите default_app_config в __init__.py вашего приложения:

# my_app/__init__.py
default_app_config = 'my_app.apps.MyAppConfig'

(и оставьте INSTALLED_APPS как-есть).

В настоящее время Django не может найти AppConfig для приложения и просто предполагает, что его нет. Таким образом, ваши взгляды и т.д. Будут работать, но метод ready() никогда не будет вызван.

Здесь соответствующий раздел документации.