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"(或 "&lt;script&gt;alert('I hacked you!')&lt;/script&gt;"

无论哪种方式,最好使用Django forms framework 来省去编写 HTML 和清理返回值的麻烦。

【讨论】:

我第二次使用 Django Forms,即使您想自己编写 HTML(文档会帮助您)。 在这种情况下,使用 django 表单的 如果我做 request.POST['my_options'] 我得到这个错误:列表索引超出范围。 ChoiceField 创建一个Form 类,比如my_options。将其填充到您的模板上下文中。然后你的整个&lt;select&gt; 标签归结为 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> 收集数据的主要内容,如果未能解决你的问题,请参考以下文章

从项目根 Django 扩展模板

JQM 从表单选项中获取值

Django 1.11 如何从保存在 CMS 站点模型中的 HTML 中显示模板变量

Django同时将视图中的var传递给两个模板

如何从 django 中的表单错误属性中获取值

从数据库传输到django dropbox