2016-12-26 52 views
1

テンプレートにdjangoフォームが表示されません。正しくレンダリングされていません。私はこれで作業しようとしましたが、フォームが表示されません。テストする新しいプロジェクトで同じコードを試しましたが、うまくいきましたが、ここでうまくいきません。この{{form.as_p}}には何も表示されません。つまり、詳細を入力して他の部分を確認するための入力フィールドはありません。前もって感謝します。django形式はテンプレートにレンダリングされません。入力フィールドが表示されません

# forms.py 

class ContactForm(forms.Form): 
    contact_name = forms.CharField(required=True) 
    contact_email = forms.EmailField(required=True) 
    contact_subject = forms.CharField(required=True) 
    content = forms.CharField(
     required=True, 
     widget=forms.Textarea 
    )` 

と:

# views.py 

def contact(request): 
    form_class = ContactForm 


    if request.method == 'POST': 
     form = form_class(data=request.POST) 

     if form.is_valid(): 
      contact_name = request.POST.get(
       'contact_name' 
      , '') 
      contact_email = request.POST.get(
       'contact_email' 
      , '') 
      contact_subject = request.POST.get(
       'contact_subject' 
       , '') 
      form_content = request.POST.get('content', '') 

      # Email the profile with the 
      # contact information 
      template = get_template('contact_template.txt') 
      context = Context({ 
       'contact_name': contact_name, 
       'contact_email': contact_email, 
       'contact_subject' : contact_subject, 
       'form_content': form_content, 
      }) 
      content = template.render(context) 

      email = EmailMessage(
       "New contact form submission", 
       content, 
       "Your website" +'', 
       ['[email protected]'], 
       headers = {'Reply-To': contact_email } 
      ) 
      email.send() 
      return redirect('contact') 

    return render(request, 'contact.html', { 
     'form': form_class, 
    }) 

このように同じルックスのためのテンプレート。 request.methodPOSTでないときは、ケースを扱っていない

テンプレート

<section id="contact"> 
     <div class="container text-center"> 
      <div class="row text-center"> 
       <div class="bg-image"> 
        <div class="col-md-6 col-md-offset-3 text-center share-text wow animated zoomInDown heading-text"> 
         <p class="heading"> 
          If you got any questions, please do not hesitate to send us a message. 
         </p> 
        </div> 
       </div> 
      </div> 

       {% block content %} 
       <h1>Contact</h1> 
       <form role="form" action="" method="post">{% csrf_token %} 

        {{ form.as_p }} 

        <button type="submit">Submit</button> 
       </form> 
       {% endblock %} 
     </div> 
    </section> 
+2

残りのビューを追加してください。私は: 'request.method ==" GET "なら何が起こるのですか? –

答えて

1

はGETでフォームを生成するためのelse節を追加します。

def contact(request): 

    form_class = ContactForm 

    if request.method == 'POST': 
     form = form_class(data=request.POST) 
     # ... more code from above ... 
    else: 
     form = form_class() # this is important 

    return render(request, 'contact.html', { 
     'form': form, # NOTE: instead of form_class!!!! 
    }) 
+0

これらの変更を行うことは役に立たなかった。送信ボタンの見出しの連絡先だけが表示されます。間に何もない。 @Udi –

+0

再度確認してください。 render()の呼び出しを修正してください。 '{'form':form、 'foo': 'BAR'}'と '{{foo}} 'を使ってテンプレートからそれを見ることができるかどうかを確認してください。 – Udi

+0

いいえ、レンダリングされません。私は{'foo': 'bar'}を自分のコンテキストに追加しようとしました。私は{{foo}}を使ってテンプレート内で同じものを見ることができません。 –

0

あなたのビューは次のようになります。

def contact(request): 
    if request.method == 'POST': 
     form = ContactForm(request.POST) 
     if form.is_valid(): 
      # form handling logic here 
      # ... 
      # ... 
      return redirect('some-link') 
     else: 
      return render(request, 'template.html', dict(form=form)) 
    else: 
     form = ContactForm() 
     return render(request, 'template.html', dict(form=form)) 
+0

これらの変更を行うことは役に立たなかった。送信ボタンの見出しの連絡先だけが表示されます。間に何もない。 @gitblame –

0

あなたが代わりにフォームインスタンスをテンプレートにフォームクラスを渡しています。

関連する問題