【问题标题】:Rendering view from form in Django在 Django 中从表单渲染视图
【发布时间】:2018-05-05 12:14:12
【问题描述】:

我在从表单中获取内容并将其显示在另一个页面上时遇到问题。

当我单击提交时,它会将我引导至正确的页面,但由于我的函数中存在错误,因此无法加载。我也不确定如何在页面上显示内容。

我的表格:

<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)

【问题讨论】:

    标签: python django forms user-input


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 2020-04-02
      • 1970-01-01
      • 2018-02-12
      • 2015-12-30
      • 2018-12-13
      • 1970-01-01
      • 2018-11-13
      • 2012-07-19
      相关资源
      最近更新 更多