문제

HTML 페이지에 몇 가지 링크가 있습니다. 현재 나는 그것들을 그렇게 처리합니다.

<p> <a href="/cases/{{case.id}}/case_rate/-">rate down</a>

url.py 항목이 있습니다.

 (r'^cases/(?P<case_id>\d+)/case_rate/(?P<oper>.)$', 'mysite.cases.views.case_rate'),

그런 다음 논리를 처리하고 DB에 부딪히는보기 기능이 있습니다.

return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))

나는 이것을하는 더 좋은 방법이 있습니까? 새로운 등급을 보여주기 위해 화면을 다시 그리기해야하기 때문에 이것이 어떻게 괜찮을지 알 수 있습니다 ...

도움이 되었습니까?

해결책

이를 처리하는 일반적인 방법은 AJAX 요청입니다.

링크 대신 view를 호출하는 JavaScript 핸들러를 넣고 Wich는 DB를 업데이트하고 항목의 새 등급으로 JSON / XML 객체를 반환합니다. 그런 다음 다른 JavaScript 핸들은 해당 응답을 수신하고 페이지를 다시로드하지 않고 화면의 등급 번호를 업데이트합니다.

이상적으로는 일반 HTML (현재 가지고있는 것)과 Ajax 버전을 모두 유지합니다. Ajax는 페이지로드 후 요소에 첨부 할 수 있으므로 JavaScript를 사용할 수없는 경우 여전히 작업 사이트가 있습니다.

그런 다음 조직과 관련하여 "Ajax"매개 변수를 가질 수 있습니다. 보기는 그에 따라 DB를 업데이트하고 AJAX 호출 인 경우 JSON / XML 응답을 반환하십시오. 그렇지 않으면 새 페이지를 반환하십시오. 이렇게하면 논리를 유지할 수 있습니다 (객체 가져 오기, DB를 업데이트) 한 곳에서.

다른 팁

Case_rate가 컨텐츠를 제공하지 않고 리디렉션을 반환한다는 점에서 Case_rate가 여전히 views.py에 가야하는지 묻는 경우 Case_rate가 요청을 처리하고 응답을 반환하기 때문에 대답은 예입니다.

그러나 views.py에 중복 코드가있는 두 개의보기 기능이있는 상황을 고려하고 요청을 가져 오지 않고 응답을 반환하지 않은 다른 함수로 해당 코드를 고려하기로 결정했습니다. Views.py에 떠나는 공정한 게임일까요? 물론, 다른 곳으로 이동하면 코드를 읽기가 더 어려워집니다. 또는 다른 곳에 두도록 선택할 수도 있습니다. 그것은 당신의 취향에 따라 실제로 당신의 부름입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top