2014-04-01 71 views
15

views.py获得 '海峡' 对象有没有属性 '得到' 在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

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

每当我请求http://127.0.0.1:8000/voice/number?id=98收到以下错误:

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-  

Full Traceback:

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

我刚开始学习Django

+0

你确定这个视图被调用吗?将pdb放入此视图中以确保视图被调用。 –

+0

请完整回溯。 –

+0

@kroolik完成! ! – user3485393

回答

39

不能直接str传为django response。 您必须使用

from django.http import HttpResponse 

如果要渲染字符串数据作为Django的查看响应。 看一看here

 
return HttpResponse(resp) 
+0

它的工作原理是打印r.clinet('test')而不是r.number(数字)?任何想法?如果我直接返回任何整数它给出相同的错误 – user3485393

+0

可能会有一个变化,它总是会进入else语句。我会建议你再次检查你的重新和你的逻辑来获得移动或客户端号码。 –

+1

它是'return HttpResponse(resp)'而不是'return Httpresponse(resp)'。 – user898763452

0

Django的观点必须始终返回HttpResponse对象,所以尽量包裹该字符串在一个HttpResponse:

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

此外,在generate_xmlnumber变量将只包含字符串'number',而不是GET参数。为了得到这一点,你可以使用:

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

它的工作原理是打印'r.clinet('test')'不是'r.number(number)'?任何想法?如果我直接返回任何整数,它会给出相同的错误 – user3485393

+1

你确定你的正则表达式是正确的吗?记住,你返回的任何东西都必须包装在一个HttpResponse中,所以如果你想返回一个整数,它必须返回HttpResponse(str(the_number))。 – DavidM

+0

是的,正则表达式是正确的。 – user3485393

相关问题