2016-10-19 1 views
0

Python과 Django에 처음 익숙해졌습니다. 버튼에서 간단한 아약스 호출을 만들어 내 Views.py에 특정 데이터를 전달하려고합니다. 그러나 시도 할 때 아래 내 아약스 코드에서 볼 수있는 URL을 작성하십시오. "?id="없이 직접 추가하지 않으면 documentId.id이 추가되지 않습니다.python url을 찾을 수 없습니다 - AJAX에서 views.py에 액세스

{%for document in documents%} 
     {{document.filename}} 
     <input type="button" id="{{document.id}}" onclick="loadData(this)" name="load-data" value="Add"/> 
    {%endfor%} 

<script type ="text/javascript"> 
    function loadData(documentId){ 
     $.ajax({ 
     url:"upload-data/load" + "?id=" + documentId.id, 
     data: {'documentId': documentId}, 
     type: 'GET', 
     success: function(){ 
      window.location.href = "http://127.0.0.1:8000/url/locations"; 
     } 
    }); 
    } 
</script> 

그러면 URL을 찾을 수 없다는 오류가 표시됩니다. 내가 아래에있는 내 urls.py에서 줄을이 방법보다 다른

url(r^"upload-data/load/([0-9]+)/$', views.loadFile, name="load-data"), 

, 나는 내 views.py에 내 데이터를 추출하기 위하여려고하고있다 방법으로 난처한 상황에 빠진입니다.

def loadFile(request): 
    documentId = request.GET.get('id') 
    newLayer = Layer(get_object_or_404(Document, pk = documentId)) 
    newLayer.save() 
    layers = Layer.objects.all() 

    return render(request, 'url/loaded.html', { 'layers': layers}) 

콘솔의 지속 오류는 다음과 같습니다 자바 스크립트에서

http://127.0.0.1:8000/upload-data/load/ [HTTP/1.0 404 Not Found]

답변

2

사용 무언가 사용할 필요가 없습니다 :

def loadFile(request): 
    documentId= request.GET.get('id', ''). 
    newLayer = Layer(get_object_or_404(Document, pk = documentId)) 
    newLayer.save() 
    layers = Layer.objects.all() 

    return render(request, 'url/loaded.html', { 'layers': layers}) 

을 그리고 당신의 URL을 업데이트 할 때 :

url(r^"upload-data/load/', views.loadFile, name="load-data") 

그리고 스크립트 등이 될 것입니다 :

<script type ="text/javascript"> 
    function loadData(documentId){ 
     $.ajax({ 
     url:"upload-data/load/?id="+ documentId.id, 
     data: {'documentId': documentId}, 
     type: 'GET', 
     success: function(){ 
      window.location.href = "http://127.0.0.1:8000/url/locations"; 
     } 
    }); 
    } 
</script> 

감사합니다.

+0

다음 줄을 변경했지만 같은 오류가 발생합니다. 도움이된다면 네트워크를 검사했고 파일은 1을 말했습니까? documentId = 1 여기서 params는 확실히 documentId : 1입니다. – Reiion

+0

늦게 답변을 드려 죄송합니다. 발생한 새 오류를 확인해야했습니다. 이제 "TypeError : 'stepUp'이 인터페이스 HTMLInputElement를 구현하지 않는 객체에서 호출되었습니다." – Reiion

+0

네, 아마 이것에 대해 잠시 확인하겠습니다! 도와 주셔서 감사합니다. 왜 그렇게되어야하는지 설명하고 싶습니다. documentId = request.GET.get ('id', '')? 나는 이것을 보지 않는다. – Reiion

1

당신은

"upload-data/load/" + documentId.id 

장고 url 정의 r^"upload-data/load/([0-9]+)/$'?id=를 사용하지 않습니다 필요합니다. 그것은 예상합니다. 당신은 def loadFile(request, id)id 필요합니다 upload-data/load/123 대신 편집


upload-data/load?id=123의.

그리고이 같은 request.GET.get('id')

+0

예. 그러나 나는이 게시물을 확인하고 이것은 요청 데이터에 액세스하는 방법입니다. http : // stackoverflow.com/questions/24059536/how-to-access-data-sent-in-ajax-call-in-views-py-python-django – Reiion

+0

내 URL은 아이디를 추가하지만 여전히 URL 패턴을 찾을 수 없습니다. – Reiion

+0

Django는 url을 숫자 즉'upload-data/load/123'으로 expext합니다.'^ "upload-data/load를 사용하면'^"upload-data/load/([0-9] +)/$'/$'이면 마지막에 숫자가없는'upload-data/load /'를 기대할 것입니다. 두 가지 모두에서'? id ='를 추가 할 수 있지만 처음에는 여전히 숫자 ieuu-data/load/123? id = 123'이 필요합니다. – furas

2

위의 대답과 의견에서 보면 url param으로 ID를 전달하는 대신 get param을 전달하려고합니다. 그럴 경우 아래의 URL을 만드십시오.

url(r^"upload-data/load/', views.loadFile, name="load-data") 

및 뷰에서 매개 변수 얻기는 replacing id with documentId입니다. 문서 ID는 dict named as data passed to view에 있습니다. 그래서 request.GET.get('data','')과 당신이 documentId하지 ID로 명명 자바 스크립트에서 가져 오기 PARAM을 전달하고 있기 때문에

def loadFile(request): 
    data = request.GET.get('data', None) 
    if data: 
     documentId = data['documentId'] 
     newLayer = Layer(get_object_or_404(Document, pk = documentId)) 
     newLayer.save() 
     layers = Layer.objects.all() 

     return render(request, 'url/loaded.html', { 'layers': layers}) 
    else: 
     return JsonResponse({'error': 'pass document id'}, status=400) 

다음과 같은 데이터 추출 ID에서 찾습니다.

HTH

관련 문제