DJANGO-赋值之前引用的局部变量“ form” [英] DJANGO - local variable 'form' referenced before assignment

查看:135
本文介绍了DJANGO-赋值之前引用的局部变量“ form”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使一个表单从用户那里获取信息,并使用该信息发送电子邮件。这是我的代码:

 #forms.py 
from django导入表单

类ContactForm (forms.Form):
nome =形式.CharField(必填=真)
电子邮件=形式.EmailField(必填=真)
msg =形式.CharField(
required =是的,
widget = forms.Textarea


#views.py
from django.shortcuts import render,redirect,get_object_or_404,HttpResponseRedirect,render_to_response
从django.core.mail导入send_mail
从.forms导入ContactForm

def contato(request):
form_class = ContactForm
如果request.method =='POST ':
form = form_class(request.POST)
if form.is_valid():
nome = request.POST.get('nome')
电子邮件= request.POST .get('email')
msg = request.POST.get('msg')

send_mail('Subject here',msg,email,['testmail@gmail.com' ],fail_silently = False)
返回HttpResponseRedirect('blog / inicio')
return render(request,'blog / inicio.html',{'form':form})


#contato.html
{%扩展 blog / base.html%}
{%块内容%}

< form role = form action = method = post >
{%csrf_token%}
{{form.as_p}}
< button type = submit&Submit;< / button>
< / form>
{%endblock%}

当我尝试进入联系页面时,我得到了错误:

 赋值




这是说错误在于views.py:

  return render(request,'blog / inicio.html',{'form':form})

我对Django有点陌生,请您帮我吗?

解决方案

您可以在此 if request.method ==中定义 form 变量。 'POST':块。
如果通过GET请求访问视图,则未定义表单
您应该将视图更改为以下内容:

  def contato(request):
form_class = ContactForm
#如果请求未发布,则初始化一个空表单
form = form_class(request.POST或None)
如果request.method =='POST':

if form.is_valid():
nome = request.POST.get('nome')
电子邮件= request.POST.get('email')
msg = request.POST .get('msg')

send_mail('Subject here',msg,email,['testmail@gmail.com'],fail_silently = False)
return HttpResponseRedirect('blog / inicio')
return render(request,'blog / inicio.html',{'form':form})


I'm trying to make a form get information from the user and use this information to send a email. Here's my code:

#forms.py
from django import forms

class ContactForm(forms.Form):
    nome = forms.CharField(required=True)
    email = forms.EmailField(required=True)
    msg = forms.CharField(
        required=True,
        widget=forms.Textarea
    )

#views.py
from django.shortcuts import render, redirect, get_object_or_404, HttpResponseRedirect, render_to_response
from django.core.mail import send_mail
from .forms import ContactForm

def contato(request):
    form_class = ContactForm
    if request.method == 'POST':
        form = form_class(request.POST)
        if form.is_valid():
            nome = request.POST.get('nome')
            email = request.POST.get('email')
            msg = request.POST.get('msg')

            send_mail('Subject here', msg, email, ['testmail@gmail.com'], fail_silently=False)
            return HttpResponseRedirect('blog/inicio')
    return render(request, 'blog/inicio.html', {'form': form})


#contato.html
{% extends "blog/base.html" %}
{% block content %}

                    <form role="form" action="" method="post">
                        {% csrf_token %}
                        {{ form.as_p }}
                        <button type="submit">Submit</button>
                    </form>
{% endblock %}

and when I try to enter in contact page I get this error:

local variable 'form' referenced before assignment

It is saying tha the error is in this line of views.py:

return render(request, 'blog/inicio.html', {'form': form})

I'm a little new on Django, can you please help me?

解决方案

You define the form variable in this if request.method == 'POST': block. If you access the view with a GET request form gets not defined. You should change the view to something like this:

def contato(request):
    form_class = ContactForm
    # if request is not post, initialize an empty form
    form = form_class(request.POST or None)
    if request.method == 'POST':

        if form.is_valid():
            nome = request.POST.get('nome')
            email = request.POST.get('email')
            msg = request.POST.get('msg')

            send_mail('Subject here', msg, email, ['testmail@gmail.com'], fail_silently=False)
            return HttpResponseRedirect('blog/inicio')
    return render(request, 'blog/inicio.html', {'form': form})

这篇关于DJANGO-赋值之前引用的局部变量“ form”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆