2014-04-01 27 views
15

views.pyalınıyor 'str' nesne hiçbir özellik Django

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 içinde 'get' vardır

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

aşağıdaki hatayı alıyorum http://127.0.0.1:8000/voice/number?id=98 talep ediyorum zaman:

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-  

Tam İnceltme:

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') 

Daha yeni öğrenmeye başladım Django.

+0

Emin misiniz zorundasın, bu görünüm olarak adlandırılır oluyor? Görünümün çağrıldığından emin olmak için bu görünümün içine bir pdb koyun. –

+0

Tam geri izleme gönderin, lütfen. –

+0

@kroolik Bitti! ! – user3485393

cevap

39

. Eğer Django yanıtı görüntülerken dize verileri işlemek istiyorsanız

from django.http import HttpResponse 

kullanmalıdır. a Look here

 
return HttpResponse(resp) 
+0

Çalışıyor, ancak r.clinet ('test') basmıyor, r.number (sayı) değil mi? Herhangi bir fikir? Eğer herhangi bir tam sayıyı doğrudan döndürürsem – user3485393

+0

aynı hatayı veriyorsa, her zaman başka bir ifadeye geçtiği bir değişiklik olabilir. Mobil veya müşteri numaranızı almak için yeniden ve mantığınızı tekrar kontrol etmenizi öneririm. –

+1

'Dönüş Httpresponse (resp)' yerine 'HttpResponse (resp) 'döndürür. – user898763452

0

Django görünümleri her zaman HttpResponse nesneyi döndürmek, böylece HTTPResponse bu dizeyi sarma denemek gerekir:

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

Ayrıca, generate_xml içinde number değişken yalnızca dize 'number' değil, GET parametresi içerecektir. Bu almak için kullanabilirsiniz: Bir django response olarak doğrudan str geçemez

request.GET.get('id') 
+0

Çalışıyor, ancak r.clinet ('test') 'r.number (sayı)' yazmıyor mu? Herhangi bir fikir? Doğrudan bir tamsayı döndürürüm, aynı hatayı veriyorsa – user3485393

+1

Düzenli ifadenizin doğru olduğundan emin misiniz? Unutmayın, döndürdüğünüz her şey bir HttpResponse'ye sarılmalıdır, bu yüzden bir tamsayı döndürmek isterseniz, HttpResponse (str (the_number)) olmalıdır. – DavidM

+0

evet, düzenli ifade doğrudur. – user3485393