Django 템플릿 사용자 정의contextprocessors

2451 단어
Django 버전
1.8.4
context를 사용자 정의하는 이유processors
블로그를 하는 과정에서 조회 순위, 평론 순위, 라벨, 글 압축파일, 우정 링크 등 내용은 모든 표시 페이지에 표시해야 한다.만약views의 처리 함수에서 상기 정보를 되돌려준다면, 이것은 심각한 코드 군더더기를 초래할 것이다.따라서 모든 템플릿 보기로 설정하면 접근할 수 있습니다. 이것은 전역 변수와 같습니다.
지식상의 준비
Django에서 context 설정 가능프로세스 ors, 모든 템플릿 보기가 렌더링될 때 대응하는 Context 값을 전달합니다.
단계
1. 전역 Context 반환 함수
myApp에서 context 만들기processors.py 파일을 만들고 함수를 만듭니다.
def global_setting(request):
    #       
    archive_list = Article.objects.distinct_date()
    .......
    return locals()

2. settings를 수정합니다.py
TEMPLATES의 contextprocessors 목록에 사용자 정의 글로벌 추가setting 함수, 추가된 후 템플릿 보기를 렌더링할 때마다 함수 글로벌setting의 해당 Context가 템플릿 뷰로 전달됩니다.다른 것은 context 를 만들지 않습니다.processors.py 파일도 가능합니다. 사용자 정의 함수 경로를context 에 추가하면 됩니다.processors면 되는데 그렇게 하면 관리하기 불편해서 추천하지 않아요.
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'blog/templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.debug',
                'django.template.context_processors.i18n',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',

                 #        
                'blog.context_processors.global_setting',
            ],
        },
    },
]

3. 뷰 로직
renderto_response() 렌더링 시 context 를 지정해야 합니다.instance=context_instance=RequestContext(request), 전역적인 Context를 지정하지 않으면 상대적인 템플릿 보기에 전달되지 않으며,render()를 통해 렌더링하면 context 를 지정하지 않아도 됩니다.instance
def index(request):
    try:
        #        ,   
        article_list = get_page(request, Article.objects.all(), number=10)
    except Exception as e:
        logger.error(e)
    return render(request, 'index.html', locals())

참고 자료
  • https://docs.djangoproject.com/en/1.8/ref/templates/upgrading/
  • https://docs.djangoproject.com/en/1.8/topics/templates/
  • http://djangobook.py3k.cn/2.0/chapter05/
  • 좋은 웹페이지 즐겨찾기