rq / django-rq

A simple app that provides django integration for RQ (Redis Queue)
MIT License
1.81k stars 286 forks source link

Fix KeyError 'opts' #604

Closed MHM5000 closed 1 year ago

MHM5000 commented 1 year ago

Hi I've recently noticed that when using Jazzmin, on the job_detail page we get this error:

Traceback (most recent call last):
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/contrib/staticfiles/handlers.py", line 76, in __call__
    return self.application(environ, start_response)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/sentry_sdk/integrations/django/__init__.py", line 148, in sentry_patched_wsgi_handler
    return SentryWsgiMiddleware(bound_old_app, use_x_forwarded_for)(
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/sentry_sdk/integrations/wsgi.py", line 115, in __call__
    reraise(*_capture_exception(hub))
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/sentry_sdk/_compat.py", line 60, in reraise
    raise value
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/sentry_sdk/integrations/wsgi.py", line 108, in __call__
    rv = self.app(
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/core/handlers/wsgi.py", line 133, in __call__
    response = self.get_response(request)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/sentry_sdk/integrations/django/__init__.py", line 431, in sentry_patched_get_response
    rv = old_get_response(self, request)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/core/handlers/base.py", line 130, in get_response
    response = self._middleware_chain(request)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/core/handlers/exception.py", line 49, in inner
    response = response_for_exception(request, exc)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/core/handlers/exception.py", line 114, in response_for_exception
    response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/core/handlers/exception.py", line 149, in handle_uncaught_exception
    return debug.technical_500_response(request, *exc_info)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django_extensions/management/technical_response.py", line 40, in null_technical_500_response
    raise exc_value.with_traceback(tb)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/sentry_sdk/integrations/django/views.py", line 85, in sentry_wrapped_callback
    return callback(request, *args, **kwargs)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django_rq/views.py", line 346, in job_detail
    return render(request, 'django_rq/job_detail.html', context_data)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/sentry_sdk/integrations/django/templates.py", line 96, in render
    return real_render(request, template_name, context, *args, **kwargs)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/shortcuts.py", line 19, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render
    return self.nodelist.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/defaulttags.py", line 315, in render
    return nodelist.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/contrib/admin/templatetags/base.py", line 23, in render
    opts = context['opts']
  File "/home/mojtahedi/.local/share/virtualenvs/ottu_backend-lex1Whd6/lib/python3.8/site-packages/django/template/context.py", line 83, in __getitem__
    raise KeyError(key)
KeyError: 'opts'

I could solve it through one of these three options:

  1. overriding page_actions block (this PR)
  2. overriding the inner block: object-tools-items
  3. use base_site.html instead of change_list.html for extension

please let me know if you need anything so we can merge this as fast as possible and hopefully release a new version.

p.s. i couldn't find the solution for jazzmin and they seem not be as active as before.

selwin commented 1 year ago

Hey sorry, but I don't think page_actions is a template block from Django and as such, this fix does not really belong here.

MHM5000 commented 1 year ago

@selwin if i send a PR to use base_site.html instead of change_list.html for extension, will it be merged?