Search code examples
pythondjangodjango-modelsdjango-admindjango-1.4

Reverse not found for my custom model admin urls after reload(sys.modules['urls.py'])


After doing following when I call reverse for my custom model admin url its giving me Reverse not found and before reloading urls.py reverse working fine.

def _reset_urls(self, urlconf_modules):
    """Reset `urls.py` for a set of Django apps."""
    for urlconf in urlconf_modules:
        if urlconf in sys.modules:
            reload(sys.modules[urlconf])
    clear_url_caches()

    resolve('/')

I debugged this and find out that admin.site._registry is empty when I call reload(sys.modules[urlconf]) because it creates new AdminSite object.

I tried preserving admin.site in a variable before reload(sys.modules[urlconf]) and assigning it back to admin.site after reload but it didn't work.

Need help.

Thanks in advance.


Solution

  • I was running into the same issue running Django 1.7, this seems to fix it for me:

    import sys
    from importlib import reload  # Python 3
    from django.conf import settings
    from django.core.urlresolvers import clear_url_caches
    from django.utils.importlib import import_module
    
    def reload_urlconf(urlconf=None):
        clear_url_caches()
        if urlconf is None:
            urlconf = settings.ROOT_URLCONF
        if urlconf in sys.modules:
            reload(sys.modules[urlconf])
        import_module(urlconf)