【问题标题】:Django - Mixin with TemplateViewDjango - 与 TemplateView 混合
【发布时间】:2014-07-07 11:10:46
【问题描述】:

我正在尝试执行以下操作,但我不断收到错误 'RegionsView' object has no attribute 'method'。我究竟做错了什么?谢谢

#views.py

class _LanguageMixin(object):

    def dispatch(self, request, *args, **kwargs):
        self.langcode = kwargs.pop("langcode")
        self.language = get_object_or_404(Language, pk=self.langcode)
        return super(_LanguageMixin, self).dispatch(self, request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(_LanguageMixin, self).get_context_data(self, **kwargs)
        context.update({"language": self.language,
                        "languages": Language.objects.values_list('code',
                                                                  flat=True)})
        return context


class RegionsView(_LanguageMixin, TemplateView):
    template_name = "regions.html"

    def get_context_data(self, **kwargs):
        context = super(RegionsView, self).get_context_data(self, **kwargs)

        regions = #......

        context.update({"regions": regions})
        return context


#urls.py

url(r'^(?P<langcode>[a-zA-Z-]+)/regions/$', RegionsView.as_view(), name='regions')

【问题讨论】:

  • 确切的堆栈跟踪是什么?
  • 对不起,是RegionsView
  • 此行产生错误:return super(_LanguageMixin, self).dispatch(self, request, *args, **kwargs)

标签: django mixins django-generic-views django-class-based-views


【解决方案1】:
return super(_LanguageMixin, self).dispatch(request, *args, **kwargs)

而不是

return super(_LanguageMixin, self).dispatch(self, request, *args, **kwargs)

request.methoddispatch函数中使用,但你使用self对象)

【讨论】:

  • 似乎解决了我的错误,但现在我在这一行得到了get_context_data() takes exactly 1 argument (2 given)context = super(ThemesView, self).get_context_data(self, **kwargs)
  • get_context_data 也必须在没有self 的情况下使用
  • 是的,在两个调用中删除 self 似乎都有效。谢谢!
猜你喜欢
  • 2018-03-13
  • 1970-01-01
  • 2011-12-29
  • 2013-09-03
  • 1970-01-01
  • 2015-04-09
  • 2018-11-18
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多