2017-01-03 1 views
-1

Ich erstelle ein Kontaktformular in Django, um eine E-Mail zu senden, aber das Formular wird nicht auf der Webseite angezeigt. Ich denke, dass das Problem möglicherweise daran liegt, dass das Formularobjekt nie korrekt an den Kontext übergeben wurde, aber ich habe keine Ahnung, wo es falsch läuft. Der Code unten ist was ich bisher habe.Mein Formular zeigt keine Felder an und ich kann nicht herausfinden, warum

from .forms import * 

Meine Ansichten

def email(request): 
    form = ContactForm() 
    if request.method == 'POST': 
     form = ContactForm(request.POST) 
     if form.is_valid(): 
      subject = form.cleaned_data['subject'] 
      email = form.cleaned_data['email'] 
      first_name = form.cleaned_data['first_name'] 
      message = form.cleaned_data['message'] 
      try: 
       send_mail(first_name + ": " + subject, message, email, 
          ['[email protected]']) 
      except BadHeaderError: 
       return HttpResponse("Invalid Header.") 
      return redirect('thankyou') 
    return render(request, 'Index-App/contact.html', {'form': form}) 

Meine Form Klasse

class ContactForm(forms.Form): 
    subject = forms.CharField(required=True) 
    from_email = forms.EmailField(required=True) 
    first_name = forms.CharField(max_length=200, required=True) 
    message = forms.CharField(widget=forms.Textarea) 

Urls

url(r'^contact/$', views.email, name='contact'), 

My Template

{% block contact %} 
    <form method="POST" action="{% url 'Index-App:contact' %}"> 
     {% csrf_token %} 
     {{ form }} 
    <input type="submit" class="btn-success" value="Send"/> 
    </form> 
    {% endblock %} 
+0

Ich habe einen Fehler gemacht, der zweite Kontakt gewesen hätte Contact() – melb27

Antwort

4

Weil Sie nicht Ihre Form sind instanziieren, wenn Methode GET ist. Außerdem müssen Sie self param request

Versuchen Sie Folgendes ändern:

def email(request): # pass request for your view param, not self 
    form = ContactForm() # You should instantiate your form for GET method 
    if request.method == 'POST': 
     form = ContactForm(request.POST) 
     # ... 
    return render(request, 'Index-App/contact.html', {'form': form}) 
+0

Dies funktionierte nicht, es keinen Sinn macht Warum. – melb27

+0

@ melb27 anstelle von 'email (self)' '' email (request) 'verwenden. Welchen Fehler bekommen Sie genau? – ettanany

+0

Die Formularfelder werden nicht angezeigt. Die Felder zum Eingeben von E-Mails und so. Es zeigt nur die Schaltfläche Senden. Gibt es eine andere Möglichkeit, ein Formular zum Senden einer Kontakt-E-Mail zu erstellen, die Sie mir zeigen können? Ich mache das jetzt schon seit ein paar Tagen. – melb27

Verwandte Themen