使用.GET []时在/ count /处出现MultiValueDictKeyError

时间:2019-02-05 06:59:26

标签: python django

在执行代码时出现以下错误:-

  / p /“文本框”中的

MultiValueDictKeyError请求方法:GET   请求网址:http://127.0.0.1:8000/count/ Django版本:2.1   异常类型:MultiValueDictKeyError异常值:'textbox'   例外   位置:/Users/rajans/anaconda3/lib/python3.7/site-packages/django/utils/datastructures.py   在 getitem 中,第79行Python   可执行文件:/ Users / rajans / anaconda3 / bin / python Python版本:3.7.0   Python路径:['/ Users / rajans / Documents / djangoprojects / wordcount',   '/Users/rajans/anaconda3/lib/python37.zip',   '/Users/rajans/anaconda3/lib/python3.7',   '/Users/rajans/anaconda3/lib/python3.7/lib-dynload',   '/Users/rajans/anaconda3/lib/python3.7/site-packages',   '/Users/rajans/anaconda3/lib/python3.7/site-packages/aeosa']服务器   时间:2019年2月5日,星期二06:39:06 +0000

Python


from django.http import HttpResponse
from django.shortcuts import render

def homepage(request):
    return render(request,'home.html')


def contact(request):
    return HttpResponse("<h2> This is a contact_us page</h2><br> You can write to rajan.sharma@freshworks.com for any query")

def count(request):
    data=request.GET['textbox']
    data_list=split(data)
    data_len=len(data_list)
    return render(request,'count.html',{'length':data_len})
--------

html格式:-

<h1>Word Count</h1><br>
This is the home page for the Word count.

<form action="{% url 'count' name%}">  <!--  "{% url 'count' %}". this will load the url even if the path is changed..it will look for the name count-->
    <textarea name="textbox" cols=40 rows="10"></textarea><br/>
    <input type="submit" value="count"/>

</form>

count.html

<h1>Counted</h1><br/>
The length is :- {{length}}

4 个答案:

答案 0 :(得分:1)

您好像没有将教科书变量作为参数传递给URL。

尝试将您的URL称为/ count_url /?textbook =“您要传递的值”

此外,建议使用.get方法作为

data = request.GET.get('textbook', None)

if data:
    # do something

答案 1 :(得分:0)

使用MultiValueDict的get方法,如果textbox不存在,您还可以提供默认值。

data=request.GET.get('textbox', None)
if data:
   #process
else:
   #process

答案 2 :(得分:0)

您正在使用http://127.0.0.1:8000/count/这个URL时,此函数的url调用将与您尝试访问“文本框”的函数中的GET方法一起使用,但是在第一次访问textbox参数时不存在,因此显示错误

您需要修改视图功能并编写一个条件

def count(request):
    data=request.GET.get('textbox', None)
    if data:
        data_list=split(data)
        data_len=len(data_list)
        return render(request,'count.html',{'length':data_len})
    else:
        return render(request,'add here your html page name where input form is there')

答案 3 :(得分:0)

您在这里有两个问题,首先,您必须处理以下事实:(如其他答案所述)您可能会在没有textbox键的情况下到达此视图。

您可以按照其他答案中所示进行修复:

GET

但是我最担心的是表单的data=request.GET.get('textbox', None) 属性:

action

这样,您是说您的<form action="{% url 'count' name%}"> 视图收到另一个参数,但这不是我们在视图实现中看到的:

count

因此,您应该将视图更改为:

def count(request):
    ...

您的网址还应该指定您的视图可以接收另一个参数:

def count(request, name):
    data=request.GET.get('textbox', None)
    data_len = 0
    if data:
        data_list=split(data)
        data_len=len(data_list)
    return render(request,'count.html',{'length':data_len})