2,038 바이트 추가됨
, 2023년 8월 4일 (금) 19:43
= 로그인 후 기존 화면으로 돌아오기 =
로그인 하게 되면 설정에 지정된 화면으로 돌아가고 만다. 다시 보던 페이지로 돌아와야 한다는 불편이 있는데... 이를 위해선 다양한 방법이 있다.
몇시간을 고민하고 시도하다 만족스런 답을 찾았다.
# 뷰 : 최약의 선택. 모든 뷰에서 기존화면을 저장하게 할 수는 없다.
# 미들웨어 : 단일 로그인이라면 괜찮지만... 소셜로그인이라든가 외부 기능을 사용하게 되면 이전 페이지를 저장할 때 외부 페이지가 저장되어버린다.
# 탬플릿 필터 이용 : 그나마 이게 범용적으로 사용 가능할듯.
=== 과정 ===
{| class="wikitable"
|+
!과정
!설명
!비고
|-
|탬플릿 태그.py 작성.
|앱 하위의 templatetag 디렉토리 하위에 태그명.py 를 작성한다.
|<syntaxhighlight lang="python">
from django import template
register = template.Library()
@register.simple_tag(takes_context=True)
def store_current_url(context):
request = context['request']
if not request.user.is_authenticated:
request.session['before_login'] = request.path
return '' # 탬플릿에 None이라고 떠서 문자열 반환이라도...
</syntaxhighlight>
|-
|탬플릿에 반영
|주소를 저장할 탬플릿에 탬플릿필터를 반영하든가, 네비바 등 모든 페이지에 관여할 수 있는 곳에 기입한다.
|<syntaxhighlight lang="html+django">
{% load 태그명 %}
{% store_current_url %}
</syntaxhighlight>
|-
|로그인 리다이렉트뷰
|로그인 후 리다이렉트되는 페이지가 있을텐데, 그 페이지를 제어하는 뷰에서 다음과 같은 코드를 추가한다.
|<syntaxhighlight lang="python">
url = request.session.get('before_login') # 기존 주소 획득.
if url != None:
del request.session['before_login']
return redirect(url)
return render(request, 'main/main.html', context)
</syntaxhighlight>
|}
[[분류:장고 기능구현(초급)]]