장고 웹서버의 모든 페이지에 특정 content 보내는 방법

예를 들어 현재 로그인한 경우 상단 navbar의 UsefulSites에는 Custom 항목이 보입니다.


navbar는 현재 웹사이트의 모든 페이지에 보이기 때문에, 개인이 설정한 즐겨찾기가 항상 로드되어야 합니다.


이럴 경우 모든 view파일에 해당 정보를 제공하는 것은 어렵습니다. 이 때,  다음과 같은 순서로 이 문제를 해결할 수 있습니다.


1. 프로젝트의 settings.py 파일 수정

settings.py 파일에 Templates 설정 항목에서 'context_processors' 항목을 찾습니다.

여기에 (앱이름).context_processors.(정의할함수이름) 을 추가합니다. 다음은 북마크 생성시 사용한 예시입니다.


1
2
3
4
5
6
7
8
9
10
11
TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                'tboard.context_processors.bookmark_context',
            ],
        },
    },
]
cs


2. 프로젝트 앱디렉토리에 context_processors.py 파일을 만들고 코드를 작성합니다.


앱폴더 안에 위파일이 없다면 만들고 다음과 같은 형태로 코드를 작성합니다.

저는 로그인한 경우 로그인한 사람의 bookmark 정보를 bookmarks에 담아 보내는 함수입니다.



1
2
3
4
5
6
7
8
9
from .models import Bookmark
 
def bookmark_context(request):
    context = {}
    if request.user.is_authenticated:
        bookmarks = Bookmark.objects.filter(user=request.user)
        context['bookmarks'= bookmarks
    return context
 
cs

이제 완료되었습니다.

템플릿에서 해당 정보를 사용하면 됩니다.