2012-08-27 47 views
3

代碼:如何在提交失敗後保留django中的表單域?從views.py

def feedback(request): 
    if request.method == "POST": 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      form.save() 
     else: 
      print("form.errors:", form.errors) 
    else: 
     form = CommentForm() 
    articles = Comment.objects.all() 
    ResponseDict = {"articles": articles, "form": form} 
    return render_to_response("feedback.html", ResponseDict, 
     context_instance = RequestContext(request)) 

我已經試過這一點,幾次修改的答案類似的問題,但沒有任何工程。當我按提交按鈕時,html中的所有表單字段都將變爲空白。

編輯:代碼feedback.html:

{% extends "base.html" %} 
{% block main %} 
    <table> 
     <form action="/feedback/" method="POST"> 
      {% csrf_token %} 
      <div class="article"> 
       <label for="name"> 
        Ваше имя: 
       </label> 
       <br /> 
       <input type="text" name="name" id="name" size="40" class="inputbox" value="" /> 
       <br /> 
       <!-- class="inputbox required" --> 
       <textarea class="WithoutTinymce" cols="50" rows="10" name="text" id="text"></textarea> 
       <br /> 
       <input type="submit" name="submit" value="Отправить"> 
      </div> <!-- /article --> 
     </form> 
    </table> 
    {% include "articles.html" %} 
{% endblock %} 

我可以從base.html文件,如果需要也將代碼粘貼。

EDIT2:從base.html文件最小代碼:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs"> 
... 
<body id="body-id" onload="loaded()"> 

<!-- Main --> 
<div id="main" class="box"> 
    <div id="page" class="box"> 
     <div id="page-in" class="box"> 
      <!-- Content --> 
      <div id="content"> 
       {% block main %} 
       {% endblock %} 
       <hr class="noscreen" /> 
      </div> <!-- /content --> 
     </div> <!-- /page-in --> 
    </div> <!-- /page --> 
</div> <!-- /Main --> 
</body> 
</html> 
+0

你的代碼看起來有效,你確定你發送帶有'POST'法的形式? –

+1

發佈你的表單模板源代碼請致電 – jpic

+0

@fastreload:是 – DSblizzard

回答

5

在模板中你沒有利用的form由視圖通過。

您可以更新模板的一部分(假設表格字段名稱是first_fieldsecond_field

<form action="/feedback/" method="POST"> 
    {% csrf_token %} 
    <div class="article"> 
     <label for="name"> 
      Ваше имя: 
     </label> 
     <br /> 
     {{ form.first_field.errors }} 
     {{ form.first_field.label_tag }}: {{ form.first_field }} 
     <br /> 
     <!-- class="inputbox required" --> 
     {{ form.second_field.errors }} 
     {{ form.second_field.label_tag }}: {{ form.second_field }} 
     <br /> 
     <input type="submit" name="submit" value="Отправить"> 
    </div> <!-- /article --> 
</form> 

更多參考 - Displaying form using template

+0

這樣一個基本的錯誤,令人難以置信。我需要休假 :) – DSblizzard

1

很簡單,你的模板有這樣的:

<input type="text" name="name" id="name" size="40" class="inputbox" value="" /> 

因此,輸入標籤的value屬性始終是空的。

同去的textarea的,應該始終呈現空:

<textarea class="WithoutTinymce" cols="50" rows="10" name="text" id="text"></textarea> 

退房的文檔有關rendering a form in a template

2

你需要傳遞的形式回模板;並且您需要按照jpic的link提供模板中的表單

以下內容應呈現您的表單錯誤:

from django.shortcuts import render, redirect 

def feedback(request): 
    ctx = {} 
    ctx['articles'] = Comment.objects.all() 
    if request.method == "POST": 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return redirect('/thanks') 
     else: 
      ctx['form'] = form 
      return render(request, 'feedback.html', ctx) 
    else: 
     ctx['form'] = CommentForm() 
    return render(request, "feedback.html", ctx) 

在模板:

{% extends "base.html" %} 
{% block main %} 
    <table> 
     <form action="/feedback/" method="POST"> 
      {% csrf_token %} 
      <div class="article"> 
       {{ form }} 
       <br /> 
       <input type="submit" name="submit" value="Отправить"> 
      </div> <!-- /article --> 
     </form> 
    </table> 
    {% include "articles.html" %} 
{% endblock %} 
相關問題