从Django中的表单呈现视图

时间:2018-05-05 12:14:12

标签: python django forms user-input

我无法从表单中获取内容并将其显示在另一页上。

当我点击提交时,它会将我引导到正确的页面但由于我的功能中存在错误而无法加载。我也不确定如何在页面上显示内容。

我的表格:

<div class = "container">
<form action="{% url 'cleaner:result' %}" method ="post" >
  {% csrf_token %}
  <div>
    <label for="cv">Enter details: </label>
    <textarea name="cv" id='cv' rows="10" cols="30" maxlength="20000"></textarea>
  </div>
  <div>
  <button>Submit</button>
  </div>
</form>
</div>

urls.py

url(r'clean/result/$', views.ResultView.as_view(), name='result'),

我的问题在于 views.py

class ResultView(View):

    template_name = 'cleaner/result.html'
    #Get details from form
    details = request.form.get("cv")
    def result(request):
        if details != '':

        return render(request, template_name)

这不是从表单中获取内容的正确方法。我怎么能得到这个?

details = request.form.get("cv")

NameError: name 'request' is not defined

之后,如何显示表单的内容?

我正在使用django 1.9和python 3.6.4。

修改

如果有人遇到这个问题,这是工作代码:

class ResultView(View):

    template_name = 'cleaner/result.html'

    def post(self, request):
        #Get details from form
        details = request.POST.get("cv")

        if details != '':

            return render(request, self.template_name)

1 个答案:

答案 0 :(得分:2)

有一些问题。首先,涉及请求的任何事情都必须在一个方法中完成,而不是在类级别;类是在导入时定义的,此时没有请求。

其次,没有必要定义一个名为request的方法。在基于类的视图中,主要方法以HTTP方法命名 - getpost - 因此您需要在此处覆盖相关的方法,即post

第三,Django中没有request.form;你在想Flask。在Django中,您需要使用request.POST

最后,要显示表单的内容,您需要将其作为上下文传递给渲染函数。