【问题标题】:How to handle form elements with get method in django when form in not submitted未提交表单时如何在django中使用get方法处理表单元素
【发布时间】:2015-09-25 13:57:31
【问题描述】:

我是 Django-python 的新手,正在尝试构建一个单页 python-django 网站,该网站向自己提交表单值。但是最初没有提交表单时如何处理.get方法呢?

表格:

<form id="filters" action="{% url 'myapp:index' %}" method="GET">
{% csrf_token %}
<label><input type="checkbox" name="abc" value="abc" checked>Include abc</label>
<label><input type="checkbox" name="pqr" value="pqr" checked>Include abc</label>
<label><input type="checkbox" name="xyz" value="xyz" checked>Include abc</label>
<input type="submit" value="Submit">
</form>

Views.py:

from django.shortcuts import render

def index(request):
    try:
        abc = request.GET['abc']
        context = {'abc':abc}
    except (KeyError):
        raise
    else:
        return render(request, 'myapp/index.html', context)

现在,当我最初为 myapp 打开索引页面时,它会引发

MultiValueDictKeyError

我认为是因为最初没有设置复选框。

如果我将 abc = request.GET['abc'] 更改为

abc = request.GET.get['abc']

它引发:

类型错误
“instancemethod”对象没有属性“getitem

追溯:

                response = middleware_method(request, callback, callback_args, callback_kwargs)
                if response:
                    break
        if response is None:
            wrapped_callback = self.make_view_atomic(callback)
            try:
                            response = wrapped_callback(request, *callback_args, **callback_kwargs) ...
            except Exception as e:
                # If the view raised an exception, run it through exception
                # middleware, and if the exception middleware returns a
                # response, use that. Otherwise, reraise the exception.
                for middleware_method in self._exception_middleware:
                    response = middleware_method(request, e)

卡住了,无法理解这些错误。

我可以像在 PHP 中那样执行 if(!isset($_POST['submit'])) 之类的操作,以便在按下提交之前不会提交我的 python 脚本吗?

【问题讨论】:

  • 您应该在这里使用 Django 表单,因为它会为您处理这些事情。

标签: python django django-forms django-views


【解决方案1】:

改变它

abc = request.GET.get['abc']

到:

abc = request.GET.get('abc')

并且,检查是否是 GET 方法:
使用:

if request.method == 'GET':

Request Method的文档

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    相关资源
    最近更新 更多