builtins.ValueError 当使用 2 个 kwargs 重定向时

builtins.ValueError when redirect with 2 kwargs

我想在我的一个视图中执行重定向,但我遇到了一个没有太多细节的错误。

我的urls.py:

urlpatterns = [
    url(
            regex=r'^(?P<pk>[0-9]+)/$',
            view=views.SheetDetailView.as_view(),
            name='detail'
        ),
    url(
            regex=r'^(?P<pk>[0-9]+)/branch/(?P<branch_slug>[a-zA-Z0-9-]+)/$',
            view=views.SheetDetailView.as_view(),
            name='detail'
        ),

]

我的看法

class SheetDetailView(LoginRequiredMixin, UserIsLinkedToSheetMixin, UserPassesTestMixin, DetailView):
    model = Sheet
    def get_context_data(self, **kwargs):
        context = super(SheetDetailView, self).get_context_data(**kwargs)
        #if no branch is requested, show the master
        if 'branch_slug' in self.kwargs:
            branch = self.get_object().get_branch(self.kwargs['branch_slug'])
            context['branch']=branch
            return context
        else:
            # redirect to master                    
            sheet_id = self.get_object().pk
            branch_slug = self.get_object().get_master().slug                    
            return redirect(reverse('sheets:detail', kwargs={'pk':sheet_id, 'branch_slug':branch_slug}), permanent=False)

我的错误信息:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py", line 63, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python3.5/site-packages/django/core/handlers/wsgi.py", line 177, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 230, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 289, in handle_uncaught_exception
    return debug.technical_500_response(request, *exc_info)
  File "/usr/local/lib/python3.5/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
    six.reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.5/site-packages/six.py", line 686, in reraise
    raise value
  File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 174, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 172, in get_response
    response = response.render()
  File "/usr/local/lib/python3.5/site-packages/django/template/response.py", line 160, in render
    self.content = self.rendered_content
  File "/usr/local/lib/python3.5/site-packages/django/template/response.py", line 137, in rendered_content
    content = template.render(context, self._request)
  File "/usr/local/lib/python3.5/site-packages/django/template/backends/django.py", line 92, in render
    context = make_context(context, request)
  File "/usr/local/lib/python3.5/site-packages/django/template/context.py", line 291, in make_context
    context.push(original_context)
  File "/usr/local/lib/python3.5/site-packages/django/template/context.py", line 61, in push
    return ContextDict(self, *dicts, **kwargs)
  File "/usr/local/lib/python3.5/site-packages/django/template/context.py", line 20, in __init__
    super(ContextDict, self).__init__(*args, **kwargs)
ValueError: dictionary update sequence element #0 has length 0; 2 is required

当我打印出 reverse() 结果并将其粘贴到我的浏览器时,一切正常。

您正在尝试 return 来自 get_context_data 的重定向。但是顾名思义,该方法应该 return 用于呈现模板的上下文。您可能需要将那段特定的逻辑放在 getdispatch 中。