web-dev-qa-db-fra.com

L'obtention de l'objet 'str' n'a pas d'attribut 'get' dans Django

views.py

def generate_xml(request, number):
    caller_id = 'x-x-x-x'
    resp = twilio.twiml.Response()

    with resp.dial(callerId=caller_id) as r:
         if number and re.search('[\d\(\)\- \+]+$', number):
            r.number(number)
         else:
             r.client('test')
   return str(resp)

url.py

url(r'^voice/(?P<number>\w+)$', 'Django_calling.views.generate_xml', name='generating TwiML'),

Chaque fois que je demande http://127.0.0.1:8000/voice/number?id=98 obtention de l'erreur suivante:

Request Method:     GET
Request URL:    http://127.0.0.1:8000/voice/number?id=90
Django Version:     1.6.2
Exception Type:     AttributeError
Exception Value:    'str' object has no attribute 'get'

Exception Location:     /usr/local/lib/python2.7/dist-     

Traceback complet:

Environment:

Request Method: GET
Request URL: http://127.0.0.1:8000/voice/number?id=90

Django Version: 1.6.2
Python Version: 2.7.5
Installed Applications:
 ('Django.contrib.admin',
'Django.contrib.auth',
 'Django.contrib.contenttypes',
 'Django.contrib.sessions',
'Django.contrib.messages',
'Django.contrib.staticfiles',
'Django_calling',
'Django_twilio',
'twilio')
 Installed Middleware:
('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')

Je viens de commencer à apprendre Django.

28
user3485393

Vous ne pouvez pas passer directement str en tant que Django response. Tu dois utiliser

from Django.http import HttpResponse

si vous voulez rendre les données de chaîne sous la forme Django affichez la réponse. jetez un œil ici

 renvoie HttpResponse (resp) 
57
Prashant Gaur

Les vues Django doivent toujours renvoyer un objet HttpResponse, essayez donc d'encapsuler cette chaîne dans une HttpResponse:

from Django.http import HttpResponse
return HttpResponse(str(resp))

De plus, la variable number dans generate_xml ne contiendra que la chaîne 'number', pas le paramètre GET. Pour l'obtenir, vous pouvez utiliser:

request.GET.get('id')
2
DavidM