2016-03-26 20 views
0

Djangoフォームの個々のフィールドを1つずつ表示して、特定のプロパティを変更しようとしています。Djangoは個々のフォームフィールドが表示されないようにします

これは私のforms.pyです。わかりやすくするために1つのフィールドに減らしました。

from django import forms 

class NameForm(forms.Form): 
    name = forms.CharField(max_length=100) 

フォームを完全にレンダリングすると完全に機能します。私のHTMLコード -

<form style="text-align:center; padding-bottom: 2%" action="/contact/" method="post" enctype="multipart/form-data"> 
    {% csrf_token %} 
    {{ form }} 
</form> 

上記のコードのためのページのソースは次のように来て -

<p><label for="id_name">Name:</label> <input id="id_name" maxlength="100" name="name" type="text" /></p> 

私は{{ form.name }}代わりの{{form}}を使用してのように、個々のフィールドをレンダリングしようとすると、問題が来ます。これのページソースは空です。 HTMLは作成されません。

{% for field in form %} 
    <div class="fieldWrapper"> 
     {{ field }} 
    </div> 
{% endfor %} 

そして、このためにレンダリングされたHTMLは次のようである - -

私も試してみました、私は完全なHTMLソースを掲示したが、各文字を印刷しているループのように思えるしていない

   <div class="fieldWrapper"> 
        &lt; 
       </div> 

       <div class="fieldWrapper"> 
        p 
       </div> 

       <div class="fieldWrapper"> 
        &gt; 
       </div> 

       <div class="fieldWrapper"> 
        &lt; 
       </div> 

       <div class="fieldWrapper"> 
        l 
       </div> 

       <div class="fieldWrapper"> 
        a 
       </div> 

       <div class="fieldWrapper"> 
        b 
       </div> 

       <div class="fieldWrapper"> 
        e 
       </div> 

       <div class="fieldWrapper"> 
        l 
       </div> 

       <div class="fieldWrapper"> 

       </div> 

       <div class="fieldWrapper"> 
        f 
       </div> 

       <div class="fieldWrapper"> 
        o 
       </div> 

       <div class="fieldWrapper"> 
        r 
       </div> 

       <div class="fieldWrapper"> 

フォームからレンダリングされたHTMLコードは、最初の数文字を結合したように表示されます。

<p><label for> 

など...

これがなぜ起こっているのか説明してください。

答えて

1

あなたの意見から何が戻ってきているか確認してください。 ビューがform.as_pを返している場合に発生する可能性があります。 これはフォームのみを返すことで修正できます。 それは動作するはずです!それでも動作しない場合は、ビューとテンプレート全体を投稿してください。

+0

はい、あなたは正しいです。私の見解は 'form.as_p'を返していました。私の愚かなこと。どうもありがとう。 –

+0

@JyotmanSingh大歓迎です! –

0

あなたは、フィールドの名前を知っている場合、あなたはそのように個別にレンダリングすることができます。

<div class="fieldWrapper"> 
    {{ form.myfield.errors }} 
    <label for="{{ form.myfield.id_for_label }}">Label for myfield : </label> 
    {{ form.myfield }} 
</div> 

(あなたはそれを定義した場合、あなたはまた、ラベルのために{{form.myfield.label_tagを}}使用することができますあなたが持っているしたい場合はFormクラス)エルス

は、あなたのためにそのようにそれを行うことができます:それは私のためによく働く

{% for field in form %} 
    <div class="fieldWrapper"> 
     {{ field.errors }} 
     {{ field.label_tag }} {{ field }} 
    </div> 
{% endfor %} 

。それでも問題が発生した場合は、それが残りのコードになければならないと思います。もしそうなら、入力テンプレートを表示してください:)

+1

すでに{{{form.myfield}}と他の選択肢を試しましたが、HTMLをレンダリングしません –

+0

コード全体を表示してください:) – AlexandreP

関連する問題