2017-05-18 13 views
1

私はdjangoの学習を始めましたが、フォームのレンダリング方法を理解できません。Djangoでは、フォームはブラウザ上でレンダリングされません

これは私が作成したform.pyです。

from django import forms 

class TweetForm(forms.Form): 
    text = forms.CharField(widget = forms.Textarea(attrs = {'rows' : 1, 'cols' : 85}), max_length = 160) 
    country = forms.CharField(widget = forms.HiddenInput()) 

これはviews.pyのコードスニペットです。

from .forms import TweetForm 
class Profile(View): 
    def get(self, request, username): 
     params = dict() 
     user = User.objects.get(username = username) 
     tweets = Tweet.objects.filter(user = user) 
     params["user"] = user 
     params["tweets"] = tweets 
     form = TweetForm 
     return render(request, 'profile.html', {'params' : params, 'form' : form}) 

これは、私が作成したフォームをレンダリングする必要があります。

{% extends "base.html" %} 
{% block content %} 
    <div class="row clearfix"> 
     <div class="col-md-12 column"> 
      <form method="post" action="post/"> 
       {% csrf_token %} 
       <div class="col-md-8 col-md-offset-2 fieldWrapper"> 
        {{ form.text.errors }} 
        {{ form.text }} 
       </div> 
       {{ form.country.as_hidden }} 
       <div> 
        <input type="submit" value="post"> 
       </div> 
      </form> 
     </div> 
     <h3>&nbsp;</h3> 
     <div class="col-md-12 column"> 
      {% for tweet in tweets %} 
       <div class="well"> 
        <span>{{ tweet.text }}</span> 
       </div> 
      {% endfor %} 
     </div> 
    </div> 
{% endblock %} 

コマンド(サーバー実行)を発行すると、ブラウザは例外なくフォームを表示しません。 views.pyファイルに問題があると思いますが、見つけられません。 フォームパラメータをテンプレート(.htmlファイル)に送信し、結果にフォームをレンダリングするにはどうすればよいですか?

答えて

2

フォームをインスタンス化しませんでした。 あなたは、このように、テンプレートでレンダリングするために、フォームのインスタンスを作成する必要が

form = TweetForm() 

注:

params変数はすでにdictの()、あなたはこのようなのparamsにフォームを追加することができています、そして、

params['form'] = form 

、のparamsとしてコンテキストにテンプレートをレンダリングし、

render(request, 'profile.html', params) 
+0

助けてくれてありがとう。私はparamsを変更しましたが、何も起こりませんでした。テンプレート(profile.html)では、どのようにパラメータを使用できますか?それは正しいですか?{{form.text}} **。 –

+1

はい、そうです。フォームが定義されているビューで変更する必要があります。 'form = TweetForm()'は、フォームをインスタンス化します。 – zaidfazil

+0

ありがとうございます。フォームが現れました。しかし、CSSは私が意図したものではありません。 –

関連する問題