2009-10-30 3 views
11

재사용 할 수있는 등급 (별 5 개가있는 일반적인 레이아웃)을 갖고 싶습니다. 나는 이것을 http://www.thebroth.com/blog/119/css-rating-stars 발견했는데 css를 사용하여이를 표시하는 방법을 설명합니다. 실제로 등급을 수집하기 위해 이미지 맵 또는 간단한 라디오 버튼을 사용하려고 생각했습니다. 다양한 모델에서이 기능을 사용하고 싶습니다.모범 사례 : 장고 템플릿에서 등급 별을 가장 효과적으로 구현하는 방법

어떻게 하시겠습니까? 위젯을 만들거나 템플릿으로이 작업을 수행 할 수 있습니까? 사실 나는 웹상에서 이것에 관해서 아무것도 발견하지 못한다는 것에 꽤 놀랐다. 그렇게 간단하지 않습니까?

답변

5

이 경우 django-users mailing list에 몇 가지 흥미로운 답변을받은 :

마이크에 의해 :

그럼 당신은 위젯을 만들 수 있습니다, 나는 별도의 평가 모델 자신을 좋아한다. 그 값을 수집하고 합계에 추가하고 점수 또는 평균을 만듭니다. 이 모델은 총 투표 수와 총 점수를 저장하며 으로 나누고 평균을 구합니다. (보기에서 수학을 수행합니다) 외래 키 관계가있는 다른 모델 에 추가. 사용자 투표를 한 번만 시행하면 현재 세션이나 쿠키 수명 외부에 적용되는 경우가 거의 없습니다 ( ). 지속성을 원한다면, 나는 에 대해 가장 좋은 것은 내 머리 꼭대기에서 확실하지 않지만 등록 된 사용자 투표 만 필요합니다. 이제 평가 양식을 표시하기 만하면 템플릿으로 포함하여 태그를 포함하고 내 템플릿에 태그를 넣습니다. 이 태그는 기본 제출 양식을 가지고 있습니다. 자체 양식은 2 개의 필드로, 선택 상자 (이 방법은 간단하게 진행되었습니다)와 숨겨진 필드 옆에이 페이지로 돌아가서 을 리디렉션 할 수 있습니다. 사용자가 양식 작업을 처리하기 위해 내 의견에서 제출할 때 나는 단지 투표를 증가시키고 총 점수를 얻고 투표가 인 페이지로 다시 리디렉션됩니다. 기존의 제출 버튼을 사용하여 양식을 url에 게시하여 전체보기를 반환합니다. 등급 별을 밝게 비추는 별을 클릭하여 무언가를 작성하면 제출할 별을 클릭하십시오. json 객체로 xhr 요청을 사용하여 게시하고보기를 업데이트하고 으로 json 객체를 반환 할 수 있습니다. 업데이트 된 평가 값 (200 인 경우)은 투표 후 새로운 값 으로 페이지를 업데이트합니다 (200으로 반환 됨). 500이라고 대답하면 오류를 처리하고 별을 투표하고 재설정하는 데 문제가있었습니다. 이것은 내가하는 일이나, 당신의 입장에서 할 것입니다. 누군가가 더 좋은 생각을 가지고 있다면, 를 말하십시오. 희망이 도움이됩니다. 마이크

에단하여

:

나는 실제로 단지 프로젝트의 5 성급 등급 내가 작업하고 내가으로 해제 가치가 재사용 아무 상관이 있는지 알아 내기 위해 노력 해왔다있어했다 패키지 (그리고 그 시간을 알아 내려고 노력하고 ..) 내가 한 일과 내가해온 일을 대략 개괄하겠습니다. 백엔드에 대해 django-rating [1,2]을 사용하고 RateField를 내 평가 모델에 연결했습니다. jQuery를 좋아해서 프론트 엔드에서 jquery-star-rating plugin [3,4] 을 기본으로 사용했습니다. 그것은 라디오 버튼 모음을 별 도구로 바꿔줍니다. I 구현을 자세히 살펴 보지 않았지만 기본적으로 링크에 설명 된 것과 동일한 CSS 기술을 사용하는 이라고 생각합니다. 을 시작하려면 JS 및 CSS를 포함하고 양식의 라디오 버튼 에 class = "star"를 추가하면됩니다. 그런 다음 라디오 버튼 에서 요청 데이터를 django 등급으로 보내는 일부보기 코드를 작성했습니다. 초간편, 그냥 장고 등급 RatingManager API를 사용하여 던져진 예외 처리 - 나는 [5]에서 내 코드에서 발췌 문장을 붙여 넣었습니다. (다소 오래된 버전의 django-rating b/c를 사용하고 있습니다. 업그레이드 할 시간이 없었습니다. 다소 희미하게 보일 수도 있습니다. 지금은 다릅니다. 마침내, 저는 두 가지 이상을 원했습니다. 항목 : 1) 사용자가 이미 항목을 평가하고 "이 항목의 속도"양식이 으로 다시 표시되는 경우 별표 5 개를 표시하는 대신 사용자의 이전 등급 인 으로 '별표 도구'를 미리 설정해야합니다. 나는 가장 쉬운 방법을 실현했습니다 이것은 클라이언트 측에서 온 것입니다 : 사용자를 시뮬레이트하는 onload 이벤트 그는 이미 클릭 한 별을 클릭합니다. [6]에있는 에 대한 내보기 및 템플릿 코드; jquery-star-rating 이 설정하고 예상하는 HTML 형식을 알아 냈고 사용자의 등급에 맞는 별을 클릭했습니다. 2) 항목을 볼 때 사용자 등급은 번호 대신 비 대화식 개의 별표로 표시되어야합니다. 나는 숫자 (등급)를 취하고 많은 스타 이미지를 반환하도록 설계된 바보 같은 템플릿 필터 을 작성했습니다. 이번에도 jquery-star-rating의 에서 HTML 서식 및 CSS 클래스를 사용했습니다. 이것을위한 나의 코드는 [7]에있다. 은 jquery-star-rating을 모두 한 번에 실행하고 라디오 버튼을 렌더링하고 이 장고 평가 백엔드에 대한 제출을 처리하는 장고 양식 필드에이 중 일부를 넣는 것이 깔끔할 것이라고 생각했습니다. 그러나 나는 아직 그것을 알아낼 수있는 기회가 가지지 않았습니다. 어쨌든 , 이것은, 이단 1http://github.com/dcramer/django-ratings [2] http://pypi.python.org/pypi/django-ratings [3] http://www.fyneworks.com/jquery/star-rating/ [4] http://code.google.com/p/jquery-star-rating-plugin/ [5] http://pastebin.ca/1650596 [6] http://pastebin.ca/1650609 [7] http://pastebin.ca/1650616

+1

도움 희망 모든 참조 pastebin URL이 깨졌습니다. – glarrain

2

PyPi에는 django-ratings 앱이 있습니다. 그것은 당신에게 언급 한 CSS 속임수의 내부 div 폭에 대한 템플릿에서 사용할 백분율 'myinstance.rating.get_percent()'로 등급을 부여 할 수 있습니다.