将 html 表单数据获取到基于 django 类的视图中

Posted

技术标签:

【中文标题】将 html 表单数据获取到基于 django 类的视图中【英文标题】:getting html form data into django class based view 【发布时间】:2013-12-02 15:40:56 【问题描述】:

我在 django 应用程序的views.py 中创建了一个类视图。

class HelloTemplate(TemplateView):
    template_name = "index.html"

    def get_context_data(self, **kwargs):
        context = super(HelloTemplate, self).get_context_data(**kwargs)
        return context

现在我在 html 页面中定义了一个表单:

<form method="get">
    <input type="text" name="q">
    <input type="text" name="q1">
    <input type="submit" value="Search">
</form> 

如您所见,我在同一页面上提交了form

现在我想在HelloTemplate 类中获取表单提交的值。我不想在现有类之外创建另一个类或方法。

另外,如果数据未在 django 中验证,我想向 html 表单发送错误消息。

我不知道该怎么做,请帮帮我。

【问题讨论】:

【参考方案1】:

你需要在视图类中定义get(因为你的表单是用get方法&lt;form method="get"&gt;定义的)方法:

class HelloTemplate(TemplateView):
    template_name = "index.html"

    def get_context_data(self, **kwargs):
        context = super(HelloTemplate, self).get_context_data(**kwargs)
        return context

    def get(self, request, *args, **kwargs):
        q = request.GET.get('q')
        error = ''
        if not q:
            error = "error message"
        return render(request, self.template_name, 'error': error)

更多信息在 django 文档这里Introduction to Class-based views

【讨论】:

如果输入无效,如何将错误发送到同一页面?而且我们不能使用“dispatch”方法吗? @NikunjAggarwal 您可以在模板上下文中将错误或任何其他数据发送到页面。 dispatch 方法查看请求是否是 GET、POST 等,如果定义了一个匹配的方法,则将请求中继到匹配的方法,如果需要,可以重新定义它。 我尝试使用 dispatch 方法,但它对我不起作用,你能在我的代码上下文中给我一个小例子吗?会有帮助的。 我不明白你为什么要在课堂上重新定义调度。如果你使用 get -define get 方法,如果你使用 post -define post 和 dispatch 将根据请求调用你需要的一个。无论如何,如果您愿意: def dispatch(self, request, *args, **kwargs): #some code。它,就像 post 或 get 一样 如果您想了解,请查看 View class source in django:views/generic/base.py【参考方案2】:

只有一个值,在request.GET['q']

【讨论】:

【参考方案3】:

快速回复,我可以向您展示我之前为评论表单所做的工作(供人们创建新评论,我的模型之一):

def review_form_view(request):
    c = 
    c.update(csrf(request))
    a = Review()
    if request.method == 'POST':
        review_form = Review_Form(request.POST, instance=a)
    if review_form.is_valid():
        a = review_form.save()
        return HttpResponseRedirect('../dest_form_complete')
        pass
    else:
        review_form = Review_Form(instance=a)
    return render_to_response('../review_form.html', 
        'review_form': review_form,
    , context_instance=RequestContext(request))

如果您有用户模型、评论模型等,您可能可以使用类似的东西。非常(非常)粗略地说,请求是用户在表单中填写的输入,'POST' 是调用的方法,让服务器知道您正在向数据库添加条目,并且 is_valid() 根据验证数据您的 models.py 参数(名称可以为 NULL 吗?年龄是整数吗?等等)。

查看https://docs.djangoproject.com/en/dev/topics/forms/ 以获得更多示例和说明。

【讨论】:

以上是关于将 html 表单数据获取到基于 django 类的视图中的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 django 表单传递到 ListView

如何从 django 的表单中获取数据?

基于 Django 类的视图:发布表单数据返回 302 Found 状态码

基于Django类的视图:发布表单数据返回302 Found状态代码

django form表单

Django之Form功能