【问题标题】:AttributeError: 'tuple' object has no attribute 'get' in views.pyAttributeError:'tuple'对象在views.py中没有属性'get'
【发布时间】:2019-05-23 12:50:02
【问题描述】:

我想创建一个注册表单,但在运行应用程序时出现属性错误

from django.shortcuts import render
from basic_app.forms import UserForm,UserProfileInfoForm


def index(request):
    return render(request,'basic_app/index.html')
def register(request):
    registered=False
    if request.method=="POST":
        user_form=UserForm(data=request.POST)
        profile_form=UserProfileInfoForm(data=request.POST)

        if user_form.is_valid() and profile_from.is_valid():
            user=user_form.save()
            user.setpassword(user.password)
            user.save()

            profile=profile_form.save(commit=False)
            profile.user=user

            if 'profile_pic' in request.FILES:
                profile.profile_pic=request.FILES['profile_pic']
            profile.save()

            registered=True

        else:
        print(user_form.errors,profile_form.errors)
    else:
        user_form=UserForm()
        profile_form=UserProfileInfoForm()
    return(request,'basic_app/registration.html',

          {'user_form':user_form,
            'profile_form':profile_form,
            'registered':registered})

输出

内部服务器错误:/basic_app/register/ 回溯(最近一次通话最后): 文件“C:\Users\Shoaib Khan\AppData\Local\conda\conda\envs\myenv\lib\site-packages\django\core\handlers\exception.py”,第 34 行,在内部 响应 = get_response(请求) 调用中的文件“C:\Users\Shoaib Khan\AppData\Local\conda\conda\envs\myenv\lib\site-packages\django\utils\deprecation.py”,第 93 行 响应 = self.process_response(请求,响应) 文件“C:\Users\Shoaib Khan\AppData\Local\conda\conda\envs\myenv\lib\site-packages\django\middleware\clickjacking.py”,第 26 行,在 process_response 中

if response.get('X-Frame-Options') is not None:

AttributeError: 'tuple' 对象没有属性 'get' [24/Dec/2018 15:34:51]“GET /basic_app/register/HTTP/1.1”500 61448

【问题讨论】:

  • 哪一行给你这个错误?你真的想用那条线做什么?

标签: django django-forms django-views


【解决方案1】:

那是因为这行:

return(request,'basic_app/registration.html',

      {'user_form':user_form,
        'profile_form':profile_form,
        'registered':registered})

您实际上已经在这里创建了一个元组。请注意您要返回的三件事周围的括号?

这是在 django 中渲染模板的方式:

from django.shortcuts import render

render(request, 'polls/index.html', context)

所以在你的情况下这会起作用:

render(request,'basic_app/registration.html', {
                                         'user_form':user_form,
                                         'profile_form':profile_form,
                                         'registered':registered
                                      })

有关render的更多信息,请查看docs

【讨论】:

    【解决方案2】:

    改变这个

    return(request,'basic_app/registration.html',
    
              {'user_form':user_form,
                'profile_form':profile_form,
                'registered':registered})
    

    return render(request,'basic_app/registration.html',
    
              {'user_form':user_form,
                'profile_form':profile_form,
                'registered':registered})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2020-04-21
      • 2021-03-18
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多