728x90
반응형
팀찾기나 팀원찾기, 대회및 공모전의 detail 페이지 내에서 빠져나가지 않고 <다음글> 버튼을 눌러 다음 카드로 넘어갈 수 있게 하고 싶었다. 현재 URI는 /teams/<pk>/ 나 member/detail/<slug> 이런식으로 만들어져 있다.
처음엔 단순히 pk+1, pk-1이런식으로 페이지를 넘길수 있게하면 되겠다 생각해서 쉽게 생각했는데 삭제된 글이 있다면 중간에 pk가 연속적이지 않을 수도 있고 팀원찾기의 경우엔 slug로 만들어놔서 그 문제도 있었다.
어떻게 할것인가?
글의 목록을 리스트로 받아오고, 현재 위치한 글의 인덱스를 찾은 다음 pk가 아닌 인덱스 번호를 움직여 페이지를 리다이렉트시킬 수 있게하면 될 것 같다. custom_tags.py 나 views.py에서 구현하면 될 듯. 시간될 때 구현하고 이어서 작성해두겠다.
class TeamDetailView(DetailView):
model = Team
context_object_name = 'target_team'
template_name = 'teamapp/page/detail.html'
def get_context_data(self, **kwargs):
team = self.object
user = self.request.user
try:
the_prev = Team.objects.filter(pk__lt=team.pk).order_by('-pk').first().pk
except:
the_prev = Team.objects.filter(pk__gt=team.pk).order_by('-pk').first().pk
try:
the_next = Team.objects.filter(pk__gt=team.pk).order_by('pk').first().pk
except:
the_next = Team.objects.filter(pk__lt=team.pk).order_by('pk').first().pk
subscription = None
if user.is_authenticated:
subscription = TeamSubscription.objects.filter(user=user, team=team)
return super(TeamDetailView, self).get_context_data(the_prev=the_prev, the_next=the_next, subscription = subscription, **kwargs)
이전 오브젝트와 이후 오브젝트의 pk를 구해 context로 보냈고 템플릿에서 이 pk를 이용해 페이지를 리다이렉트시켰다
다음 페이지나 이전 페이지가 없을 경우엔 에러가 발생하는데 이를 해결하기위해 try except구문으로 예외경우에 리스트를 뒤집어주었다
728x90
반응형
'웹 프로그래밍' 카테고리의 다른 글
[Django] 단체메일 전송하기 (0) | 2021.10.25 |
---|---|
[Django & Ajax] 실시간 채팅 구현 (0) | 2021.10.24 |
[Django Error] circular dependency (0) | 2021.10.18 |
리다이렉션한 횟수가 너무 많습니다 (0) | 2021.10.15 |
AWS Load Balancer에서 HTTP서 HTTPS Redirect (0) | 2021.09.11 |