2015-01-21 7 views
0

임 메신저 메소드 GET으로 그걸 얻기 위해 시도하는 상세보기에서 GET으로 변수 "segundos"를 얻으려고 노력 :방법 GET에 의한 변수가 DetailView의 장고에 들어갈 수

JS 파일 :

$(document).ready(function(){ 
    var segundos=340; 
    console.log(segundos); 
    $.ajax({ 
     data : {'segundos':segundos}, 
     url : '/ajax/puzzle-1/', 
     type : 'GET',  
    }); 
}); 

views.py

class PuzzleView(DetailView): 
    model = Puzzle 
    template_name = 'puzzle.html' 

    def get (self,request,*args,**kwargs): 
     seconds = request.GET["segundos"] 
     self.object = self.get_object() 
     ranking = Ranking.objects.create(puzzle_id=self.object.id,usuario=self.request.user,segundos=seconds,puesto=89) 
     context = self.get_context_data(object=self.object) 
     return self.render_to_response(context) 

class RankingView(ListView): 
    model = Ranking 
    template_name = 'ranking.html' 
    queryset = Ranking.objects.filter(puzzle_id=1).order_by('segundos')[:3] 

class PuzzleAjaxView(TemplateView): 
    template_name = 'ranking.html' 

는하지만 난 유명한 오류 "MultiValueDictKeyError"를 얻는다. 내가 같은 방법을 시도 할 경우 "GET"하지만 TemplateView으로, 변수 i를 얻을 수 있지만 DetailView

이런 경우에, 내 urls.py과 :

urlpatterns = patterns('puzzle.views', 
    url(r'^actividad/puzzle/(?P<slug>[-_\w]+)/$',PuzzleView.as_view(),name='puzzle'), 
    url(r'^ajax/puzzle-1/.*$', PuzzleAjaxView.as_view(),name='ajax'), 
    url(r'^ranking/.*$', RankingView.as_view(),name='ranking'), 

    ) 

답변

3
seconds = request.GET("segundos") 

할 수 있습니다 ' GETMultiValueDict으로 전화하면됩니다. 사전 조회를 통해 액세스해야합니다. dict의 하위 클래스입니다.

request.GET.get('segundos') 
request.GET['segundos'] 

업데이트는 향후 참조를 위해

, 당신의 예외 역 추적은이 모든 것을 설명했을 것이다, 그러나 오류 메시지가 아주 명확해야한다 : 무언가를 segundosMultiValueDict에서 유효한 키가 없다는 라인을 따라.

나는 가정 당신의 PuzzleView 귀하의 예제는 당신이 PuzzleAjaxView (당신이 TemplateView

무엇을 호출에 매핑하여 AJAX 호출로 PARAMS을 GET 보여주기 때문에 어떤 GET 매개 변수를 전달되지 없구요 (무엇을 당신이 DetailView를 호출)

이 무엇 여부를 당신의 get 함수의 작동 여부를 결정한다하는 것은 뷰 클래스는 TemplateView 또는 DetailView 사실에 근거하지, 그것은 segundos은 당신의 AJAX보기에 전달된다는 사실이다. 즉

을 .. 어떤보기 (TemplateView, DetailView은 중요하지 않음) GET dict에 직접 액세스 request.GET['foobar']을 통해 액세스하면 get 매개 변수가 전달되지 않으면 실패합니다.

+0

'request.GET.get ('segundos ', False)'so 사용자가 GET 변수를 설정하지 않고 호출하면 응용 프로그램에서 예외가 발생하지 않습니다. 또한 변수 이름을 영어로 지정하는 것이 좋습니다. –

+0

@ dan-klasson'get'의 목적 중 하나는 그것이 예외를 던지지 않도록하는 것입니다. 두 번째 인수가없는 경우의 기본값은'None'입니다. https://docs.python.org/2/library/stdtypes.html#dict.get –

+0

오, 그래, 내 잘못이야. , Yuji'Tomita'Tomita @ –