2016-08-03 2 views
0

Я добавил свойство router (экземпляр DRR's SimpleRouter) в свой AppConfig. Я хочу получить список всех установленных приложений в моем файле urls.py и добавить любое приложение с свойством router в мои шаблоны url.Загрузка модуля django.apps внутри файла шаблонов url

Это мой urls.py файл:

from django.conf.urls import url, include 
from django.contrib import admin 
from django.apps import apps 

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)) 
] 

# Loading the routers of the installed apps and core apps 
for app in apps.get_app_configs(): 
    if hasattr(app, 'router'): 
     urlpatterns += app.router.urls 

и это пример моего модифицированного AppConfig:

from django.apps import AppConfig 
from .router import auth_router 


class AuthConfig(AppConfig): 

    name = "core.auth" 
    # to avoid classing with the django auth 
    label = "custom_auth" 

    # router object 
    router = auth_router 

    def ready(self): 
     from .signals import user_initialize, password_reset_set_token 

default_app_config = 'core.auth.AuthConfig' 

Когда я пытаюсь выше решение, я в конечном итоге получить «Джанго .core.exceptions.AppRegistryNotReady: приложения еще не загружены. " сообщение об ошибке!

Я пробовал использовать предлагаемые решения here, но никто из них не работал!

ответ

1

Ошибка была вызвана папкой urls.py, она была в AppConfig. Мне пришлось импортировать auth_router внутри готового метода

from django.apps import AppConfig 


class AuthConfig(AppConfig): 

    name = "core.auth" 
    # to avoid classing with the django auth 
    label = "custom_auth" 

    # router object 
    router = None 

    def ready(self): 
     from .signals import user_initialize, password_reset_set_token 
     from .router import auth_router 
     self.router = auth_router 

default_app_config = 'core.auth.AuthConfig' 
Смежные вопросы