DJANGO-赋值之前引用的局部变量“ form” [英] DJANGO - local variable 'form' referenced before assignment
本文介绍了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%}
当我尝试进入联系页面时,我得到了错误:
赋值
$ p $之前引用的局部变量'form' p>
这是说错误在于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 thisif request.method == 'POST':
block. If you access theview
with a GET requestform
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屋!
查看全文