[컴][웹] Django template 에 jade 사용하기

장고에서 제이드 사용하기 / 장고에서 jade 사용하기




jade 를 이용해서 django template 을 대신할 수 있다. 이녀석을 사용하면, pyjade 가 template folder 에 있는 .jade 를 compile 해서 django template 으로 만들고, 이 django template 을 django 가 사용하게 된다.


순서

순서는 아래와 같다.
  1. pip install pyjade
  2. setting.py 수정
  3. template folder 에 .jade file 을 넣어두면 된다.


pyjade 설치

먼저, pyjade 를 설치하자

c:...\>pip install pyjade


settings.py

Django 1.9 라면 아래 노란부분을 추가하자. Django 1.9 이하 버전은 ref. 2 를 참고하자.

TEMPLATES = [{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [normpath(join(SITE_ROOT, 'templates'))],
    'OPTIONS': {
        'debug': DEBUG,
        'loaders': [
            
            ('pyjade.ext.django.Loader',(
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
            )),
        ],
        'builtins': ['pyjade.ext.django.templatetags'],
        # 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',
        ]
    },

}]


InvalidTemplateLibrary 

혹시나 아래와 같은 error 가 난다면, github에서 pyjade 의 최신버전을 받아서 설치하자. pip 로 설치한 경우에 version 이 틀어진 경우가 있는 듯 하다. 아래 링크를 참고하자.
Django Version: 1.9
Exception Type: InvalidTemplateLibrary
Exception Value: 
Invalid template library specified. ImportError raised when trying to load 'pyjade.ext.django.templatetags': cannot import name add_to_builtins



pyjade 와 jade 와 차이점

  1. 기본적으로 if 문등의 jade 문법이 django template 의 {%if next%} 로 변경된다.
  2. 그리고 - 로 표현되는 문장도 djagno template 의 {% %}으로 변경된다.
  3. 일반적으로 {% %} 를 사용하려고 != 를 사용할 필요는 없다. 그냥 {% 를 인식한다.
  4. 그리고 attribute 입력시에 ,(comma) 가 필수다. (jade 에서는 없어도 된다.)
  5. {{ }} 를 사용하고 싶으면 | 을 이용하자. 또는 "#{ STATIC_URL }" 도 가능하다.
  6. #{AA} 은 {{AA|escape}} 이라서, jade 의 변수로 인식한다.(?)
  7. jade 에서 escape 문자를 사용해서 javascript 의 문법을 사용하는데, 이것은 django template 의 문법으로 바꾸어야 한다.
  8. mixin 은 지원하지 않는다. : Please add the ability to include mixins in pyjade! · Issue #70 · syrusakbary/pyjade


!!! 5
html(lang="en")
  head
    title= pageTitle
    title 추가title - #{pageTitle}
    script(type='text/javascript').
      if (foo) {
         bar()
      }
  body
    #login
        form.form-horizontal(name='LoginForm', action="{% url 'social:complete' backend=backend %}", method='POST')
            - csrf_token
            
            if next
                input(type="hidden", name="next", value= next)
            
            div(attr= TVAL['bell'])
              | #{TVAL.bell}
            title= TVAL.bell

            .control-group
              label.control-label(for='username') Username
              .controls
                input#username(type='text', name='username', placeholder='Username')
            .control-group
              label.control-label(for='password') Password
              .controls
                input#password(type='password', name='password', placeholder='Password')
            .control-group
              .controls
                button.btn(type='submit') Login


cached loader

pyjade 에서 기본적으로 template 을 memory 에 caching 해서 사용한다고 한다.

그렇기 때문에 django.template.loaders.cached.Loader 를 같이 쓰지 않아도 괜찮다. (같이 쓸 수도 없다.)



Reference

  1. pyjade 3.1.0 : Python Package Index
  2. syrusakbary/pyjade · GitHub



댓글 없음:

댓글 쓰기