【问题标题】:Reverse not found for my custom model admin urls after reload(sys.modules['urls.py'])重新加载后我的自定义模型管理 url 找不到反向(sys.modules['urls.py'])
【发布时间】:2015-06-30 11:20:08
【问题描述】:

当我为我的自定义模型管理 url 调用 reverse 后,它给了我 Reverse not found 并且在重新加载 urls.py 之前反向工作正常。

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('/')

我对此进行了调试,发现当我调用reload(sys.modules[urlconf])admin.site._registry 为空,因为它创建了新的AdminSite 对象。

我尝试将admin.site 保留在reload(sys.modules[urlconf]) 之前的变量中,并在重新加载后将其分配回admin.site,但它不起作用。

需要帮助。

提前致谢。

【问题讨论】:

  • 为什么需要这样做?
  • @DanielRoseman 我在单元测试中需要这个。
  • 不是什么时候,为什么你需要这个?
  • @DanielRoseman 因为我们在 urls.py 中使用了功能标志,所以我们在测试中对其进行修补,然后重新加载使其生效。
  • @knbk 请看上面的^^评论。

标签: python django django-models django-admin django-1.4


【解决方案1】:

我在运行 Django 1.7 时遇到了同样的问题,这似乎为我解决了这个问题:

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)

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 2011-11-28
    • 2021-06-07
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多