[컴][웹] Django 에서 template context 항목 추가



Django template context processor

Django 에서 template 을 사용할 때 context 를 template 으로 넘겨서 template 에 값을 전달한다. 이 context 에 값을 추가하는 방법을 알아보자.


직접 coding

아래처럼 TemplateView 를 상속받아서 context 에 직접 추가해 줄 수 있다. 하지만 아무래도 이 방법은 번거롭다.

# coding=utf-8
from django.template.context_processors import csrf
from django.views.generic import TemplateView

from django.conf import settings

__author__ = 'namh'


class TemplateViewWithCsrf(TemplateView):
    """
    This set the csrf which could be called by the Django template
    """
    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        context.update(csrf(request))
        context.update({u"site_name": settings.SITE_NAME})
        
        return self.render_to_response(context)



TEMPLATES.context_processors 를 이용

손쉽게 context_processor 를 이용할 수 있다.
  1. 자신만의 context_processors 를 만들고(참고: Writing your own context processors
  2. settings.py 에서 TEMPLATES.context_processors 를 세팅하는 곳에 추가하면 된다.
//context_processors.py
# coding=utf-8
from django.conf import settings

def myproject_context(request):
    """
    Adds static-related context variables to the context.
    """
    return {
        'MYCONTEXT': settings.MYCONTEXT
    }


TEMPLATES = [{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [normpath(join(SITE_ROOT, 'templates'))],
    'OPTIONS': {
        'debug': DEBUG,
        # see : https://docs.djangoproject.com/en/1.8/ref/templates/upgrading/
        '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',
            'django.template.context_processors.request',


            # context of mine
            'testproject.context_processors.myproject_context',

        ],
        'loaders': [
            # ('django.template.loaders.cached.Loader', [
            #     'django.template.loaders.filesystem.Loader',
            #     'django.template.loaders.app_directories.Loader',
            # ]),
            ('pyjade.ext.django.Loader',(
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
            )),
        ],
        'builtins': ['pyjade.ext.django.templatetags'],


    },

}]






댓글 없음:

댓글 쓰기