Переопределение 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')
]
Ну, представление работает. Это означает, что приложение зарегистрировано.
Ответы
Ответ 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()
никогда не будет вызван.
Здесь соответствующий раздел документации.