【问题标题】:Django 1.9 Type Error __init__() takes 1 positional argument but 2 were given - problems with class decoratingDjango 1.9 类型错误 __init__() 需要 1 个位置参数,但给出了 2 个 - 类装饰问题
【发布时间】:2017-02-06 21:47:32
【问题描述】:

一点上下文:我正在尝试创建一个 CreateView 页面,供用户在使用位于 URL '/profile/' 的 Django 1.9 时输入信息。

当用户未登录时,我转到 /profile/ url,然后它会按预期将我重定向到登录页面。但是,当我登录该站点,然后转到 /profile/ 时,它会显示此错误:

/profile/ 处的类型错误

__ init __() 接受 1 个位置参数,但给出了 2 个

目前,我正在使用 method_decorator 装饰一个类,如此处的文档中所述:https://docs.djangoproject.com/en/1.10/topics/class-based-views/intro/#decorating-the-class

这是我的views.py:

    @login_required(login_url = "/login/", redirect_field_name = None)
    @method_decorator(login_required, name = 'dispatch')
    class SpkCreateView(CreateView):
        form_class = SpkCreateForm
        template_name = 'userprofile/spk_form.html'
        def get(self, request):
            form = self.form_class(None)
            return render(request, self.template_name, {'form': form})
        def post(self, request):
            form = self.form_class(request.POST)
            if form.is_valid():
                spk_fname = form.cleaned_data['spk_fname']
                spk_lname = form.cleaned_data['spk_lname']

method_decorator 的“名称”参数也让我感到困惑,所以我不确定是否与此有关。

如果有人有任何解决方案,那么谢谢!

编辑:

已更改@login_required(login_url = "/login/", redirect_field_name = None) @method_decorator(login_required, name = 'dispatch')

@method_decorator(login_required(login_url = "/login/", redirect_field_name = None), name = 'dispatch')

这是来自 Powershell 的回溯

Internal Server Error: /profile/
Traceback (most recent call last):
  File "C:\Users\Programs\Python\Python36-32\lib\site-packag
es\django\core\handlers\base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Programs\Python\Python36-32\lib\site-packag
es\django\core\handlers\base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
TypeError: __init__() takes 1 positional argument but 2 were given
[28/Sep/2016 22:20:22] "GET /profile/ HTTP/1.1" 500 57532

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    您正在用login_required 装饰班级,无论有没有@method_decorator。您需要将要使用的装饰器传递给method_decorator,在这种情况下:

    @method_decorator(login_required(login_url="/login/", redirect_field_name=None), name='dispatch')
    class SpkCreateView(CreateView):
        ...
    

    【讨论】:

    • 不幸的是,这仍然给出了与以前相同的 TypeError - 不过还是谢谢你。有任何其他想法可能是错误的吗?
    • @jayt 请展示您的新尝试和回溯。
    • 我已对问题进行了编辑,以向您展示我所做的事情
    • @jayt 请显示完整的回溯,而不仅仅是错误消息。
    猜你喜欢
    • 1970-01-01
    • 2021-10-19
    • 2023-03-04
    • 2022-10-06
    • 2023-03-15
    • 1970-01-01
    • 2021-08-18
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多