2017-10-15 61 views
0

我在我的主页上创建了一个联系表单,但直到我第一次点击提交表单时才显示该表单。即调用get方法。我想保留它作为我的主页的独立视图,以便重新点击“提交”时不会影响我的主页。我的主页加载时有没有办法加载我的'def email'?如何在Django中初始化我的表单?

模板形式

<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> 

网址

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

视图

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}) 

回答

1

包括在主页视图上下文的形式。像这样:

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

正如那句老话:“像魅力一样工作......” – Josh