I am taking a course on Udemy and the instructor doesn’t include a method 
attribute in the form tag.  But as you suggested, Deepak, I went ahead and 
added method="get" to my form tag in my home.html template. So line 7 now 
reads: <form action="{% url 'home' %}" method="get">

I am still encountering the MultiValueDictKeyError. 

Here is the traceback again:

MultiValueDictKeyError at /

'ccEntry'

Request Method: GET

Request URL: http://127.0.0.1:8000/

Django Version: 2.0.2

Exception Type: MultiValueDictKeyError

Exception Value: 

'ccEntry'

Exception Location: 
/home/<user>/.local/lib/python3.7/site-packages/django/utils/datastructures.py 
in __getitem__, line 79

Python Executable: /usr/sbin/python

Python Version: 3.7.2

Python Path: 

['/home/<user>/dev/projects/python/2018-and-2019/cel2fah-original_with_CC-redact-project-_Django202/first_project_attempt',

'/usr/lib/python37.zip',

'/usr/lib/python3.7',

'/usr/lib/python3.7/lib-dynload',

'/home/<user>/.local/lib/python3.7/site-packages',

'/usr/lib/python3.7/site-packages',

'/usr/lib/python3.7/site-packages/setuptools-40.6.2-py3.7.egg']

Server time: Thu, 7 Mar 2019 20:11:44 +0000

Environment:


Request Method: GET

Request URL: http://127.0.0.1:8000/

Django Version: 2.0.2

Python Version: 3.7.2

Installed Applications:

['django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles']

Installed Middleware:

['django.middleware.security.SecurityMiddleware',

'django.contrib.sessions.middleware.SessionMiddleware',

'django.middleware.common.CommonMiddleware',

'django.middleware.csrf.CsrfViewMiddleware',

'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.messages.middleware.MessageMiddleware',

'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File 
"/home/<user>/.local/lib/python3.7/site-packages/django/utils/datastructures.py"
 
in __getitem__

 77.             list_ = super().__getitem__(key)

During handling of the above exception ('ccEntry'), another exception 
occurred:

File 
"/home/<user>/.local/lib/python3.7/site-packages/django/core/handlers/exception.py"
 
in inner

 35.             response = get_response(request)

File 
"/home/<user>/.local/lib/python3.7/site-packages/django/core/handlers/base.py" 
in _get_response

 128.                 response = self.process_exception_by_middleware(e, 
request)

File 
"/home/<user>/.local/lib/python3.7/site-packages/django/core/handlers/base.py" 
in _get_response

 126.                 response = wrapped_callback(request, *callback_args, 
**callback_kwargs)

File 
"/home/<user>/dev/projects/python/2018-and-2019/cel2fah-original_with_CC-redact-project-_Django202/first_project_attempt/first_project_attempt/views.py"
 
in home

 5.     number = request.GET['ccEntry']

File 
"/home/<user>/.local/lib/python3.7/site-packages/django/utils/datastructures.py"
 
in __getitem__

 79.             raise MultiValueDictKeyError(key)

Exception Type: MultiValueDictKeyError at /

Exception Value: 'ccEntry'


Request information

USER

AnonymousUser

GET

No GET data

POST

No POST data

FILES

No FILES data


On Thursday, March 7, 2019 at 2:50:00 PM UTC-5, Deepak Chhitarka wrote:
>
> In your home.html template, you forgot to write method="get" . Which I 
> think is causing the problem here.
>
> On Fri 8 Mar, 2019, 12:03 AM Matthew Pava, <matthe...@iss.com 
> <javascript:>> wrote:
>
>> Please just paste the error in the email message. The error message that 
>> you have mentions a ‘method’ object, which is not present in the code that 
>> you have sent to us.  That would be where the problem is.
>>
>>  
>>
>>  
>>
>>  
>>
>> *From:* django...@googlegroups.com <javascript:> [mailto:
>> django...@googlegroups.com <javascript:>] *On Behalf Of *drone4four
>> *Sent:* Thursday, March 7, 2019 11:29 AM
>> *To:* Django users
>> *Subject:* Re: Django credit card redaction app - - 
>> MultiValueDictKeyError
>>
>>  
>>
>> Thanks, Sam for the help.
>>
>>  
>>
>> You wrote:
>>
>>  
>>
>> I would be careful how you pass the data on get, somewhere in your front 
>> end code you are probably not passing the data through as you expected. 
>> Instead of using .GET, use .GET.get to get your data. This will either 
>> return the value you want, or none.
>>
>>  
>>
>> I looked up GET.get Django and found an SO post titled, “Django 
>> request.GET 
>> <https://stackoverflow.com/questions/3500859/django-request-get>” which 
>> has quite a few up votes. Based on that SO answer, In my views.py I changed 
>> the line (where I declare the number variable) from `number = 
>> request.GET['ccEntry']` to `number = request.GET.get['ccEntry', None]`  
>>
>>  
>>
>> That gives a different error (a type error this time): 
>> https://pastebin.com/L81LVtzi 
>>
>>  
>>
>> You also mentioned my front end. I had included the template in my 
>> original post. I have since refined it so it is more readable. Here is my 
>> improved home.html template:
>>
>>  
>>
>> <html>
>>
>>
>>
>> <head>
>>
>>  <title> Search </title>
>>
>> </head>
>>
>>   <body>
>>
>> <center>
>>
>> <form action="{% url 'home' %}">
>>
>>  <div>
>>
>>    <h3>Enter your fake Chuckee Cheese Neptune credit card number!</h3>
>>
>>    <input type="number" id="number" name="ccEntry" required placeholder=" 
>> " pattern=".{16,16}"/>
>>
>>      <div class="requirements"> Must be a 16 digit number. </div>
>>
>>    <input type="submit" value="Redact!!!"/>
>>
>>  </div>
>>
>> </form>
>>
>>    <h3>Original Card Number:</h3>
>>
>>    {{ number }}
>>
>>    <h3>Redacted Card Number:</h3>
>>
>>    {{ redacted_num }}
>>
>>    <h3> Did this work?</h3>   
>>
>> </center>
>>
>> </body>
>>
>> </html>
>>
>>  
>>
>>  
>>
>> Sam, you also suggested:
>>
>>  
>>
>> I think you have made the error of not passing your data to the get 
>> header as you didn't explicitly write this on the form element. 
>>
>>  
>>
>> I did explicitly include my data in my form element as you can see in the 
>> above template.
>>
>>  
>>
>> Check the URL and log the get object in Django to make sure the data is 
>> actually appearing in both.
>>
>>  
>>
>> The data is present as “ccEntry” in both home.html and in views.py.
>>
>>  
>>
>>  
>>
>>
>> On Thursday, March 7, 2019 at 10:42:25 AM UTC-5, Sam Taiwo wrote:
>>
>> I would be careful how you pass the data on get, somewhere in your front 
>> end code you are probably not passing the data through as you expected. 
>> Instead of using .GET, use .GET.get to get your data. This will either 
>> return the value you want, or none. I think you have made the error of not 
>> passing your data to the get header as you didn't explicitly write this on 
>> the form element. Check the URL and log the get object in Django to make 
>> sure the data is actually appearing in both.
>>
>>  
>>
>> On Thu, Mar 7, 2019, 13:52 drone4four <drone...@gmail.com> wrote:
>>
>> Hello!
>>
>>  
>>
>> I’m trying to run a basic Django app which redacts a 16 digit number 
>> entered by the user. I had a it running a few minutes ago. I’m not sure 
>> what I changed, but now I am getting a MultiValueDictKeyError. I’ve triple 
>> checked every variable. The only dictionary in my project is in views.py at 
>> line 7. As far as I can tell, it’s all accurate and positioned correctly. I 
>> don’t recall changing this dictionary or any other operator around this 
>> line. I’m stumped. What would you people suggest? Have a look at my setup.
>>
>>  
>>
>> *Here is the error and traceback in full:* https://pastebin.com/QwSrmAJx 
>>
>>  
>>
>> *Here is my urls.py:*
>>
>> from django.conf.urls import  include, url
>>
>>
>>
>> from django.contrib import admin
>>
>> from django.urls import path
>>
>> from . import views
>>
>>
>> urlpatterns = [
>>
>>    url(r'^admin/', admin.site.urls),
>>
>>    url(r'^$', views.home, name='home'),
>>
>>  
>>
>>  
>>
>> *views.py:*
>>
>> from django.http import HttpResponse
>>
>>
>>
>> from django.shortcuts import render
>>
>>
>> def home(request):
>>
>>    number = request.GET['ccEntry']
>>
>>    redacted_num = 'xxxx xxxx xxxx {}'.format(number[-4:])
>>
>>    return render(request, 'home.html', {'number':number, 'redacted_num':
>> redacted_num})
>>
>>  
>>
>>  
>>
>> *home.html template:*
>>
>> <style></style>
>>
>>
>>
>>
>> <center>
>>
>> <form action="{% url 'home' %}">
>>
>>  <div>  <br>  <br>  <br>  <br>
>>
>>    <h3>Enter your fake Chuckee Cheese Neptune credit card number!</h3>
>>
>>    <input type="number" id="number" name="ccEntry" required placeholder=" 
>> " pattern=".{16,16}"/>
>>
>>      <br>
>>
>>      <br>
>>
>>      <div class="requirements">
>>
>>        Must be a 16 digit number.
>>
>>      </div>
>>
>>      <br>
>>
>>    <input type="submit" value="Redact!!!"/>
>>
>>        </div>
>>
>>    </form>
>>
>>    <br>
>>
>>    <h3>Original Card Number:</h3>
>>
>>    <br>
>>
>>    {{ number }}
>>
>>    <br>
>>
>>    <h3>Redacted Card Number:</h3>
>>
>>    <br>
>>
>>    {{ redacted_num }}
>>
>>    <br>
>>
>>    <h3> Did this work?</h3>   
>>
>>    <br>
>>
>> </center>
>>
>>  
>>
>>  
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to django-users...@googlegroups.com.
>> To post to this group, send email to django...@googlegroups.com.
>> Visit this group at https://groups.google.com/group/django-users.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/49da3086-6f3d-415b-b451-7e4c6a6e542c%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-users/49da3086-6f3d-415b-b451-7e4c6a6e542c%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to django-users...@googlegroups.com <javascript:>.
>> To post to this group, send email to djang...@googlegroups.com 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/django-users.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/304766a5-c9d4-409d-afe3-d66151d334bf%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-users/304766a5-c9d4-409d-afe3-d66151d334bf%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to django-users...@googlegroups.com <javascript:>.
>> To post to this group, send email to django...@googlegroups.com 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/django-users.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/004d454583a24833a5c27bc7e7232e00%40iss2.ISS.LOCAL
>>  
>> <https://groups.google.com/d/msgid/django-users/004d454583a24833a5c27bc7e7232e00%40iss2.ISS.LOCAL?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/b5bbfda1-2b8a-47ef-bc6a-32de89e6ea0c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to