2017-05-07 84 views
0

我是django的新手,試圖在html文件中顯示一個表單,而當我在瀏覽器中查看這個特定頁面時,我沒有看到字段。Django表單字段沒有顯示

下面是HTML文件:在我所看到的一切,但形式顯示出來two_factor.html

{% extends 'authentication/base.html' %} 

{% block title %}Two Factor{% endblock title %} 

{% block two_factor %} 
    <div class="container"> 
    <h3>Your code</h3> 
    <form role="form" action="" method="post" enctype="multipart/form-data"> 
     <div class="form-group"> 
      {% csrf_token %} 
      {{ form }} 
      <div class="form-group"> 
       <button type="submit" class="btn btn-success">Submit</button> 
      </div> 
     </div> 
    </form> 
</div> 
{% endblock two_factor %} 

我forms.py

class TwoFactorForm(forms.Form): 
    code = forms.CharField(label='Code', widget=forms.TextInput(attrs={'type': 'text', 'placeholder': 'Your code'})) 

我views.py

class TwoFactorView(View): 
    form_class = TwoFactorForm 
    template_name = 'authentication/two_factor.html' 

    def get(self, request): 
     form = self.form_class(None) 
     return render(request, self.template_name, {'form': form}) 

    def post(self, request): 
     form = self.form_class(request.POST) 

     if form.is_valid(): 

      return redirect('authentication/secret.html') 

     return render(request, self.template_name, {'form': form}) 

我在base.html中添加了塊。我只看到按鈕提交。網址都很好。

+0

我在這裏看不到任何明顯的東西。我知道你說URL是正確的,但是你能否確認get和post方法是否被正確調用,例如通過在那裏放置'print'語句?甚至可以向渲染調用添加另一個參數並將其輸出到模板中。 –

回答

0

更改使用

form = self.form_class(None) 

使用

form = self.form_class() 
+0

不是這樣。表單在通過render()從表單到表單的轉換過程中不顯示。但是在通過重定向()時顯示錶單。 – Kepchyk

+0

@Kepchyk:用戶輸入無效數據後,表單不顯示?無效的數據意味着在'post'中調用'render'。 _transition_是什麼意思? – Timo

-1

在你的HTML代碼的最後行視圖類

class TwoFactorView(View): 
form_class = TwoFactorForm 
template_name = 'authentication/two_factor.html' 

def get(self, request): 
    form = self.form_class() 
    return render(request, self.template_name, {'form': form}) 

def post(self, request): 
    form = self.form_class(request.POST) 

    if form.is_valid(): 

     return redirect('authentication/secret.html') 

    return render(request, self.template_name, {'form': form}) 

相反的,去替代,

{% endblock two_factor %} 

只是

{% endblock %} 
+0

錯誤,請閱讀文檔:「爲了增加可讀性,您可以選擇爲您的代碼{%endblock%}標籤提供一個名稱」。因此op的html代碼是有效的。 – Timo

+0

我的壞..謝謝你的頭..不會再讓這個..請欣賞你指出,順便說一句... – zaidfazil