2016-03-02 24 views
1

我試圖使表單從用戶獲取信息並使用此信息發送電子郵件。這裏是我的代碼:DJANGO - 分配前引用的局部變量「表單」

#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, ['[email protected]'], 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 %} 

,當我嘗試接觸頁面輸入我得到這個錯誤:

local variable 'form' referenced before assignment 

enter image description here

跟它塔的錯誤是在這條線的意見。潘岳:

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

我在Django的一個小新,你能幫幫我嗎?

回答

4

您在此if request.method == 'POST':塊中定義form變量。 如果您通過GET請求訪問viewform未被定義。通過初始化一個空的「形式」,「附帶損害」,那麼你也可以提供一個「虛擬」的值作爲 -

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, ['[email protected]'], fail_silently=False) 
      return HttpResponseRedirect('blog/inicio') 
    return render(request, 'blog/inicio.html', {'form': form}) 
+0

非常感謝! –

0

如果可以這麼說: 您應該將視圖更改爲這樣的事情直到「request.POST」被初始化...

def contato(request): 
form = "Dummy String" 
form_class = ContactForm 
# if request is not post, initialize an empty form 
#form = form_class(request.POST or None) # Maybe Not 
form = form_class(request.POST) # Instead 
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, ['[email protected]'], fail_silently=False) 
     return HttpResponseRedirect('blog/inicio') 
return render(request, 'blog/inicio.html', {'form': form}) 
相關問題