2017-10-15 1 views
0

Ich habe ein Kontaktformular auf meiner Homepage erstellt, aber das Formular wird nicht angezeigt, bis ich das Formular zum ersten Mal anklicke. I.e. Aufruf der Methode get. Ich möchte es als separate Ansicht zu meiner Homepage behalten, so dass es beim erneuten Klicken auf "Senden" keinen Einfluss auf meine Homepage hat. Gibt es eine Möglichkeit, meine 'def email' zu laden, wenn meine Homepage geladen wird?Wie initialisiere ich mein Formular in Django?

Schablonenform

<form method="post" action="{% url 'home_page:email' %}"> 
      {% csrf_token %} 
{#   {% bootstrap_form form.as_p %}#} 
      {{ form.as_p }} 
      <input type="submit" value="Sign Up" class="btn btn-default"> 
     </form> 

Urls

urlpatterns = [ 
    url(r"^$", views.HomePage.as_view(), name="home"), 
    url(r'^email/$', views.email, name='email'), 
    url(r'^success/$', views.success, name='success'), 
] 

Ansichten

class HomePage(MessageMixin, TemplateView): 
    template_name = "index.html" 

def email(request): 
    if request.method == 'GET': 
     form = ContactForm() 
    else: 
     form = ContactForm(request.POST) 
     if form.is_valid(): 
      subject = form.cleaned_data['subject'] 
      from_email = form.cleaned_data['from_email'] 
      message = form.cleaned_data['message'] 
      try: 
       send_mail(subject, message, from_email, ['[email protected]']) 
      except BadHeaderError: 
       return HttpResponse('Invalid header found.') 
      return redirect('success') 
    return render(request, "index.html", {'form': form}) 

Antwort

1

Fügen Sie das Formular in der HomePage Ansicht Kontext. Gefällt mir:

class HomePage(MessageMixin, TemplateView): 
    template_name = "index.html" 

    def get_context_data(self, **kwargs): 
     context = super(HomePage, self).get_context_data(**kwargs) 
     context['form'] = ContactForm(None) 
     return context 
+0

Wie das alte Sprichwort sagt, "arbeitete wie ein Charme" ... – Josh

Verwandte Themen