2017-05-07 111 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

相关问题