2016-09-16 15 views
1

非常に単純なWebアプリケーションを実行するためにDjangoで作業しています。Django - django.form以外のフォームからデータを取得する

私は現在、ユーザーがビットごとに情報ビットを完成するようにフォームの連続を作成しようとしています。 プレゼンテーションに本当に手を差し伸べたいと思っていたので、最初はHTMLでしかやろうとしませんでした。ここに私のコードです。

私は2つのテンプレートcreate_site.htmlとcreate_cpe.htmlを持っています。 2番目のページで何を聞くべきかを知るために、最初のページから情報を得る必要があります。ここで

は私create_site.htmlは

<body> 

<form action="{% url 'confWeb:cpe_creation' %}" method="post" class="form-creation"> 
    {% csrf_token %} 
    <div class = "form-group row"> 
     <label for="site_name" class="col-xs-3 col-form-label">Name of theSite</label> 
     <div class="col-xs-9"> 
      <input id="site_name" class="form-control" placeholder="Name" required="" autofocus="" type="text"> 
     </div> 
    </div> 
<button class="btn btn-lg btn-primary btn-block" type="submit">Créer</button> 
</form> 
</body> 

されており、ここで私はこのすべてを行うために使用していviews.pyです:私がやりたい何

def site_creation(request): 

    template = loader.get_template('confWeb/create_site.html') 
    return HttpResponse(template.render(request)) 

def cpe_creation(request): 
    if request.method == "POST" : 
     print(request.POST) 

がにあります私のビュー "cpe_creation"の中で、私のフォームの入力の値を取得します。私は "要求"オブジェクトから情報を取得しようとしましたが、私はそれを行うことはできませんでした。たぶん私は非常に基本的なHTMLスキルが欠けているかもしれませんが、私はフォームの情報がリクエスト本体にあると思っていましたが、そうではありませんでした。

私もDjangoフォームを使ってみましたが、問題はフォームがどのように見えるかを非常に正確に制御することができないことです。入力を作成すると、そのサイズやそのようなものを伝えることができません。

私の質問は次のとおりです。 - 提出されたフォームからデータを取得するにはどうすればよいですか? - 私はDjangoのフォームでそれを行う必要がありますか?私がしたら、どのように入力のCSSクラスを制御できますか?

答えて

3

テンプレート内のフォームのフィールドには、リクエストに渡すためにname属性が必要です。

その後は、このようなあなたのビューでそれを取得することができます:

site_name = request.POST.get('site_name')

+0

ありがとうございました。私が探していたものでした。 フォームを作成しているときに、「ラベル」と「入力」が関連するための「for」および「id」パラメータを使用することが最善であることがわかりました。本当に必要ですか? (名前とIDの両方があまりにも多いように感じるので) – Licia

+1

IDは必須ではありません。名前は必須です。両方を持つことは良いことです – sebb

1

あなたのフォームフィールドにはname属性が必要です。

  <input id="site_name" name="site_name" class="form-control" placeholder="Name" required="" autofocus="" type="text"> 

また、Djangoフォームを使用する場合は、明示的にウィジェットを定義してフォームフィールドのCSSクラスを設定できます。

class SiteForm(forms.Form): 
    site_name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'})) 

クラスform-controlから判断して、私はあなたがブートストラップを使いたいと思っています。 django-crispy-formsをチェックしてください。これは、DjangoがBootstrapで簡単にスタイルを作成できるようにします。

関連する問題