django - 从 HTML <select> 收集数据
Posted
技术标签:
【中文标题】django - 从 HTML <select> 收集数据【英文标题】:django - collecting data from a HTML <select> 【发布时间】:2011-06-14 18:24:44 【问题描述】:我已经看过一些关于如何在 Django 中从 html 语句中收集数据的文档,但对我来说没有一个非常清楚。有人可以分享一个真实的工作示例吗?
就我而言,我的模板文件中有这样的内容:
<select title="my_options">
<option value="1">Select value 1</option>
<option value="2">Select value 2</option>
</select>
为了收集选定的值,views.py 中有什么内容?谢谢!
【问题讨论】:
【参考方案1】:如果是 GET 请求,request.GET['my_options']
。如果是 POST,则为 request.POST['my_options']
。这将是一个字符串,"1"
或 "2"
(或 "<script>alert('I hacked you!')</script>"
)
无论哪种方式,最好使用Django forms framework 来省去编写 HTML 和清理返回值的麻烦。
【讨论】:
我第二次使用 Django Forms,即使您想自己编写 HTML(文档会帮助您)。 在这种情况下,使用 django 表单的 如果我做 request.POST['my_options'] 我得到这个错误:列表索引超出范围。 用ChoiceField
创建一个Form
类,比如my_options
。将其填充到您的模板上下文中。然后你的整个<select>
标签归结为 form.my_options
。按照文档中的示例处理表单。
request.POST
应该是一个类似字典的对象。我认为它永远不会抛出IndexError
,除非你在做一些非常奇怪的事情。【参考方案2】:
通过 POST 管理数据
def yourView(request):
# Use '.get('id', None)' in case you don't receive it, avoid getting error
selected_option = request.POST.get('my_options', None)
if selected_option:
# Do what you need with the variable
在 Django 中可能对表单有用的一件事是,如果您对 URL 进行 POST 或只是加载它,可以做出不同的事情:
def yourView(request):
if request.POST: # If this is true, the view received POST
selected_option = request.POST.get('my_options', None)
if selected_option:
# Do what you need to do with the variables
return render_to_response(...)
return render_to_response(...)
如果视图刚刚加载或收到 POST,则有 2 个render_to_response
以防您需要做不同的事情。
通过 GET 管理数据
def yourView(request):
# Use '.get('id', None)' in case you don't receive it, avoid getting error
selected_option = request.GET.get('my_options', None)
if selected_option:
# Do what you need with the variable
【讨论】:
不应该是名字而不是id吗?以上是关于django - 从 HTML <select> 收集数据的主要内容,如果未能解决你的问题,请参考以下文章