2012-05-30 5 views
0

내 앱의 REST 유형 JSON API를 빌드하려고하는데 테스트하는 동안 오류가 발생하여 계속 오류가 발생합니다. 내 페이지의 URL.TypeError : 'str'객체를 호출 할 수 없습니다. (Django/Python)

URLconf :

url(r'^calendar/(?P<id>\d+)/(?P<year>\d+)/(?P<month>\d+)/$', 'calendar_resource'), 

views.py :

def json_view(func): 
    def wrapper(*args, **kwargs): 
     result = func(*args, **kwargs) 
     return HttpResponse(json.dumps(result), mimetype="text/json") 
    return wrapper  

@json_view 
def calendar_resource(request, id, month, year): 
    if id != request.user.id: 
     return HttpResponseForbidden() 
    thisMonthEnd = datetime.datetime(year, month, calendar.mdays[month]) 
    thisMonthStart = datetime.datetime(year, month, 1) 
    l = Lesson.objects.filter(student__teacher = request.user).filter(startDate__lte=thisMonthEnd).filter(endDate__gte=thisMonthSta‌​rt) 
    lessonList = list(l) 
    return lessonList 

나는 내가 그것을 더 많은 작업을 수행 할 수있는 목록에 검색어 세트 결과를 변환하고 있습니다 (즉, 삽입 기록 이는 쿼리에서 반환되지 않을 것입니다.) fullCalendar로 처리하기 위해 목록을 JSON으로 다시 전달하기 전에.

ETA :이 구현을 사용하게 된 original question입니다.

역 추적 :

Environment: 
Request Method: GET 
Request URL: http://localhost:5678/calendar/1/2012/5/ 

Django Version: 1.3.1 
Python Version: 2.6.5 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.humanize', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.admin', 
'lessons', 
'registration'] 
Installed Middleware: 
('django.middleware.csrf.CsrfViewMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 

Exception Type: TypeError at /calendar/1/2012/5/ 
Exception Value: 'str' object is not callable 
+0

당신이 점점 오류를 추가 할 수 있습니까? – marianobianchi

+0

요청 방법 : \t GET 요청 URL : \t에 http : // 알파 : 5678/달력/2천12분의 1/5/ 장고 버전 : \t 1.3.1 예외 유형 : \t 형식 오류 예외 값 : \t 'str'객체를 호출 할 수 없습니다. –

+0

URLConf에서 "calender_resource"대신 "views.calender_resource"(어쩌면 응용 프로그램 이름이 붙습니다) 여야합니다. –

답변

3

, 그것은 'views.calender_resource' 대신 단지 'calender_resource'해야한다. 기본적으로

,

urlpatterns = patterns('', 

    url(r'^calendar/(?P<id>\d+)/(?P<year>\d+)/(?P<month>\d+)/$', 'APP_NAME.views.calendar_resource'), 
) 

또는 :

APP_NAME이 뷰가 속해있는 응용 프로그램의 이름입니다
urlpatterns = patterns('APP_NAME.views', 

    url(r'^calendar/(?P<id>\d+)/(?P<year>\d+)/(?P<month>\d+)/$', 'calendar_resource'), 
) 

. reference를 들어


:

url(regex, view, kwargs=None, name=None, prefix='') 

You can use the url() function, instead of a tuple, as an argument to patterns(). This is convenient if you want to specify a name without the optional extra arguments dictionary. For example:

urlpatterns = patterns('', 
    url(r'^index/$', index_view, name="main-view"), 
    ... 
) 

This function takes five arguments, most of which are optional:

url(regex, view, kwargs=None, name=None, prefix='') 
0

확인 field lookup syntax. filter()에 kwargs를 전달해야합니다. 즉, 표준 파이썬 비교 연산자 대신 __lt 형식 구문을 사용하는 것을 의미합니다.

l = Lesson.objects.filter(student__teacher=request.user).filter(startDate__lte= thisMonth).filter(endDate__gte=thisMonthStart) 
+0

잘 잡습니다. 필자의 필터를'Lesson.objects.filter (student__teacher = request.user) .filter (startDate__lte = thisMonthEnd) .filter (endDate__gte = thisMonthStart)'로 변경했지만 여전히 행운은 없습니다. 같은 오류. –

1

전체 추적을 제공해 주시겠습니까?

문제까지 :

  1. 할 수 있습니다하지 json.dumps 직접 모델 인스턴스의 목록. 당신은 덤프를 원하는 경우, django.core.serializers

    from django.core.serializers.json import Serializer 
    Serializer().serialize(Lesson.objects.filter(...)) 
    
  2. 'application/json'을 살펴 가지고하는 표준 JSON에 대한 MIME 타입 대신에 당신의 URLConf에서 'text/json'

+0

감사합니다.이 특정 구현을 시도하는 데 영향을 준 원래의 질문에 대한 전체 추적 및 링크를 포함하여 더 많은 정보를 추가했습니다. –

관련 문제