2013-10-01 4 views
1

나는이 간단한보기 기능이 있습니다IndexError : 문자열 인덱스가 범위를 벗어났습니다. - 장고 - 왜?

def location(request,locname,lid): 
    try: 
     location = Location.objects.get(id=lid)     
     return render_to_response('location.html',{'location':location},context_instance=RequestContext(request)) 
    except Location.DoesNotExist:  
     return render_to_response('404.html',{},context_instance=RequestContext(request)) #<-- error line 

을하지만 난 단지 프로덕션 서버에 IndexError: string index out of range을 얻고있다.

오류 줄이 마지막 줄에 있습니다.

내가 뭘 잘못하고 있니?

답변

1

왜 그냥하지 :

from django.shortcuts import render, get_object_or_404 
from your_app.models import Location 

def get_location(request, lid): 
    location = get_object_or_404(Location, id=lid) 
    return render(request, 'location.html', {'location': location}) 

@hellsgate가 언급 한 바와 같이 데이터베이스에 존재하지 않는 찾고있는 ID가 조회되는 때문에 DoesNotExist 예외가 발생되는 이유입니다.

+0

안녕하세요, Brandon, 감사합니다. 이보다 시원하게 보입니다. render_to_response와 context_instance의 차이점은 무엇입니까? – doniyor

+0

이것이 더 좋은 방법이지만 오류가 발생하는 이유를 설명하지 않습니다. – hellsgate

+0

render가 자동으로 컨텍스트 인스턴스를 만듭니다. – Brandon

1

오류는 실제로 try: 블록

location = Location.objects.get(id=lid). 

이것은 다음 Location.DoesNotExist 예외를 트리거의 첫 번째 라인에서 발생된다. 그 이유는 .get에 사용 된 위치 ID가 데이터베이스 위치 테이블에 존재하지 않기 때문입니다. 프로덕션 데이터베이스에 ID를 포함하여 개발 데이터베이스와 동일한 위치 데이터가 포함되어 있는지 확인하십시오. 그러면이 오류가 사라집니다.

관련 문제