Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我会得到KeyError:“;Django设置没有';t定义解析器";?_Python_Django_Unit Testing_Webassets_Django Assets - Fatal编程技术网

Python 为什么我会得到KeyError:“;Django设置没有';t定义解析器";?

Python 为什么我会得到KeyError:“;Django设置没有';t定义解析器";?,python,django,unit-testing,webassets,django-assets,Python,Django,Unit Testing,Webassets,Django Assets,我得到的错误如下: (遗嘱资产)➜ 测试者git:(硕士)✗ django-admin.py测试 正在为别名“default”创建测试数据库。。。 E ====================================================================== 错误:测试\获取\站点\根\带有\设置\覆盖(app.tests.AssetsTestCase) -----------------------------------------------------

我得到的错误如下:

(遗嘱资产)➜ 测试者git:(硕士)✗ django-admin.py测试 正在为别名“default”创建测试数据库。。。 E ====================================================================== 错误:测试\获取\站点\根\带有\设置\覆盖(app.tests.AssetsTestCase) ---------------------------------------------------------------------- 回溯(最近一次呼叫最后一次): 文件“/Volumes/fifteen5cs/testassets/app/tests.py”,第27行,在test\u get\u site\u root\u中,带有\u设置\u覆盖 http_client.get(“/”) get中的文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django/test/client.py”,第473行 response=super(客户机,self).get(路径,数据=data,**额外) get中的文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django/test/client.py”,第280行 返回自我请求(**r) 请求中的文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django/test/client.py”,第444行 六、重放(*exc_信息) 文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django/core/handlers/base.py”,第114行,在get_响应中 响应=包装的回调(请求,*回调参数,**回调参数) 文件“/Volumes/fifteen5cs/testassets/app/views.py”,第9行,索引中 上下文\实例=请求上下文(请求)) 文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django/shortcuts/init.py”,第29行,在render\u to\u响应中 返回HttpResponse(loader.render_to_string(*args,**kwargs),**HttpResponse_kwargs) 文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django/template/loader.py”,第169行,在render_to_字符串中 返回t.render(上下文\实例) 文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django/template/base.py”,第140行,在render中 返回self.\u呈现(上下文) 文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django/test/utils.py”,第85行,插入指令化测试渲染 返回self.nodelist.render(上下文) render中的文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django/template/base.py”,第840行 bit=self.render_节点(节点,上下文) 文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django/template/debug.py”,第78行,在render_节点中 返回node.render(上下文) 文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django_assets/templatetags/assets.py”,第72行,呈现 对于bundle.url()中的url: URL中的文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/webassets/bundle.py”,第783行 对于捆绑包、额外过滤器、self.iterbuild(ctx)中的新ctx: iterbuild中的文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/webassets/bundle.py”,第679行 对于捆绑包,在self.resolve\u内容(ctx)中: resolve_contents中的文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/webassets/bundle.py”,第233行 结果=ctx.resolver.resolve\u源(ctx,项) 文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/webassets/bundle.py”,第50行,在getattr 返回self.getattr(self.\u父项,项) 文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/webassets/bundle.py”,第58行,在getattr中 返回getattr(对象、项) 文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/webassets/env.py”,第675行,位于get\U解析器中 返回self.\u存储['resolver'] 文件“/Users/paul/.pyenv/versions/testassets/lib/python2.7/site packages/django_assets/env.py”,第62行,在getitem 自身。_变换_键(键)) KeyError:“Django设置未定义解析器”

我已将此错误半链接到在我的一个单元测试(如下所示)中使用Django utils函数
Django.test.utils.override\u settings

(注意,在第二次请求期间引发异常!)

我正在处理的代码库第一次提出了这个问题,它太大,太私有,无法共享,因此我将项目精简为少量代码,仍然会产生这个问题。这个小项目可以在这里找到

我花了两天时间试图确定这个错误的确切来源,以及为什么它发生在第二个请求中,而不是第一个请求中。我尝试了许多单元测试的排列。有趣的是,如果我创建第二个单元测试,一个不启用设置覆盖(如下面的一个)的单元测试,并命名该测试,使其在测试期间首先运行,则测试套件通过。如果我将相同的单元测试放在
test\u get\u site\u root\u和\u settings\u overrides
单元测试之后,两者都将失败

      def test_get_site_root(self):
          http_client = Client()
          http_client.get('/')

          http_client.get('/')
在此问题上的任何帮助都将不胜感激

最后,我能找到的唯一能说明相同或类似问题的问题是:

更新2015/01/12

这个问题似乎与信号的使用有关。我已将上述失败测试归结为以下几点:

from django.test.utils import override_settings
from django.utils.unittest.case import TestCase
from django_assets.env import get_env


class AssetsTestCase(TestCase):
    def test(self):
        settings_override = override_settings()
        settings_override.enable()
        get_env().resolver
        settings_override.disable()

        settings_override.enable()
        get_env().resolver
        settings_override.disable()
BundleError: %s not found (using staticfiles finders)
import sys

from django_assets import env as assets_env

settings_override = override_settings(**OVERRIDE_SETTINGS)
settings_override.enable()
... do things ...
settings_override.disable()
assets_env.reset()
assets_env._ASSETS_LOADED = False
del sys.modules['<app_name>.assets']

事实证明,此问题是由于禁用任何
override\u设置后,
django\u assets.env.env
单例未重置。此单例对象未在“设置”对象之间重建这一事实意味着,如果在覆盖设置的上下文中构建了
django_assets.env.env
对象,则当这些覆盖设置替换为非覆盖设置时,通过创建BundleError: %s not found (using staticfiles finders)
import sys

from django_assets import env as assets_env

settings_override = override_settings(**OVERRIDE_SETTINGS)
settings_override.enable()
... do things ...
settings_override.disable()
assets_env.reset()
assets_env._ASSETS_LOADED = False
del sys.modules['<app_name>.assets']