将 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方法<form method="get">
定义的)方法:
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 类的视图:发布表单数据返回 302 Found 状态码