2015-01-08 5 views
0

사진 갤러리 사이트에서 인증 된 사용자의 액세스를 제한하려고합니다. 나는 인증 된 사용자가 모든 사진을 보길 원하고, 인증되지 않은 사용자는 3 명만 보길 원합니다.인증 된 사용자에게만 액세스 허용

Photologue라는 타사 라이브러리에 DetailView()를 상속 한 GalleryDetailView() 클래스가 있습니다. 갤러리 상세 뷰에서 get_context_data() 메서드를 재정의하고 표시 할 사진 목록을 준비하는 코드를 추가하고 해당 목록을 템플릿 컨텍스트에 추가하려고합니다. 지금까지 내가 가지고 :

class CustomGalleryDetailView(GalleryDetailView): 

    def get_context_data(self, **kwargs): 
     context = super(CustomGalleryDetailView, self).get_context_data(**kwargs) 
     if not self.request.user.is_authenticated(): 
      items = OrderedDict(itertools.islice(context.iteritems(), 4)) 
      return items 

     else: 
      return context 

편집 : 몇 가지 답변을 바탕으로, 지금이 :

class CustomGalleryDetailView(GalleryDetailView): 

    def get_context_data(self, **kwargs): 
     context = super(CustomGalleryDetailView, self).get_context_data(**kwargs) 
     if not self.request.user.is_authenticated(): 
      context['object'] = Gallery.objects.filter()[:3] 
      return context 

     else: 
      return context 

그러나 어떤 이유로

, 여전히 모든 사진을 볼 수 모두 인증 된 사용자와 인증되지 않은 사용자. 나는 이것을 여러 시간 동안 놀고 있었기 때문에 인증이 효과가 있다는 것을 알고 있으며, 다른 결과를 보았습니다. (필요한 것이 아닌).

+0

템플릿 자체의 모양은 무엇입니까? –

답변

0

우선, context = ...을 밖으로 이동하십시오. 두 번째로 인쇄물이나 중단 점을 추가하여 if의 두 번째 부분에 있는지 확인하십시오. 나는 믹스 인/뷰 방식의 문제점을 파악하지 않았지만

0

, 나는/다른 템플릿 내부의 경우 간단한으로 문제를 해결 :

{% 경우 user.is_authenticated %} {%를 갤러리 %에서 사진} ... {%의 ENDFOR의 %} {% 다른 사람 %} 갤러리에서 사진에 대한 {% | 조각 : "3"%} ... {% ENDFOR %} {% endif %}

logi를 처리하는 대신보기에서 결과를 제한하는 것이 '정확함'으로 보였습니다. c 템플릿 안에 있지만 간단한 솔루션이고 작동합니다.

관련 문제