Django Template

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

project/settings.py에 TEMPLATES κ΄€λ ¨ 섀정을 ν•˜κ³  μžˆλŠ” 것을 λ³Ό 수 μžˆλ‹€. μ—¬κΈ°μ„œλŠ” μ–΄λ–»κ²Œ tmeplate을 뢈러였고 λ Œλ”λ§ ν•  것인지λ₯Ό μ„€μ •ν•  수 μžˆλ‹€.

'APP_DIRS': True λŠ” INSTALLED_APPS λ””λ ‰ν† λ¦¬μ˜ templates ν•˜μœ„ 디렉토리λ₯Ό νƒμƒ‰ν•œλ‹€.

Template 파일 μƒμ„±ν•˜κΈ°

ν…œν”Œλ¦Ώμ„ 생성할 app 디렉토리 ν•˜μœ„μ— templates 디렉토리λ₯Ό μƒμ„±ν•œλ‹€. templates 디렉토리 ν•˜μœ„μ— polls 디렉토리 내뢀에 index.html νŒŒμΌμ„ 생성해쀀닀.

polls
β”œβ”€β”€ __init__.py
β”œβ”€β”€ admin.py
β”œβ”€β”€ apps.py
β”œβ”€β”€ migrations
β”‚   β”œβ”€β”€ 0001_initial.py
β”‚   β”œβ”€β”€ __init__.py
β”œβ”€β”€ models.py
β”œβ”€β”€ templates
β”‚   └── polls
β”‚       └── index.html
β”œβ”€β”€ tests.py
β”œβ”€β”€ urls.py
└── views.py

polls/templates/polls/index.html κ³Ό 같은 ν˜•νƒœκ°€ λœλ‹€. μ—¬κΈ°μ„œ μ™œ templates 디렉토리 ν•˜μœ„μ— polls 디렉토리λ₯Ό μƒμ„±ν•΄μ€€κ±ΈκΉŒ?

Djangoμ—μ„œλŠ” 이름이 μΌμΉ˜ν•˜λŠ” 첫번째 template을 μ„ νƒν•œλ‹€. λ§Œμ•½ λ™μΌν•œ template이 λ‹€λ₯Έ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— μžˆμ„ κ²½μš°μ— 이 λ‘˜μ˜ 차이λ₯Ό κ΅¬λΆ„ν•˜μ§€ λͺ»ν•œλ‹€. κ°€μž₯ μ •ν™•ν•œ template을 μ§€μ •ν•˜κΈ° μœ„ν•΄μ„œ κ°€μž₯ νŽΈλ¦¬ν•œ 방법은 μ΄λ¦„κ³΅κ°„μœΌλ‘œ κ΅¬λΆ„μ§“λŠ” 것이닀.

<!-- polls/index.html -->
{% if last_question_list %}
    <ul>
        {% for question in last_question_list %}
            <li><a href="/polls/{{question.id}}/">{{ question.question_text}}</a></li>
        {% endfor %}
    </ul>
{% else %}
   <p>No polls are avaliable.</p>
{% endif %}

Template μ–Έμ–΄

HTML(정적)에 파이썬 μ½”λ“œ(동적)λ₯Ό λ°”λ‘œ 넣을 수 μ—†λ‹€. template tag{}λŠ” νŒŒμ΄μ¬μ„ HTML으둜 λ°”κΎΈμ–΄ λΉ λ₯΄κ³  μ‰½κ²Œ 동적인 μ›Ήμ‚¬μ΄νŠΈλ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

rubyμ—μ„œλŠ” html.erb

{{λ³€μˆ˜}}

context둜 μ „λ‹¬λœ λ³€μˆ˜λ₯Ό ν…œν”Œλ¦Ώμ—μ„œ 값을 좜λ ₯ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 μ€‘κ΄„ν˜Έ μ•ˆμ— λ³€μˆ˜μ΄λ¦„μ„ λ„£μ–΄μ„œ ν‘œμ‹œν•  수 μžˆλ‹€.

<h1>{{ title }}</h1>
<p>{{ context }}</p>

{%%} ν…œν”Œλ¦Ώ νƒœκ·Έ

`

` νƒœκ·Έ μ•ˆμ—λŠ” python의 forλ¬Έ, ifλ¬Έκ³Ό 같이 νƒ¬ν”Œλ¦Ώμ˜ λ‘œμ§μ„ μ œμ–΄ν•œλ‹€.

{% if count > 0 %}
    Data Count = {{ count }}
{% else %}
    No Data
{% endif %}

{% for item in dataList %}
  <li>{{ item.name }}</li>
{% endfor %}

{% csrf_token %}

{{ | }} ν•„ν„°

ν…œν”Œλ¦Ώ ν•„ν„°λŠ” λ³€μˆ˜μ˜ 값을 νŠΉμ •ν•œ 포맷으둜 λ³€ν˜•ν•˜λŠ” κΈ°λŠ₯을 ν•œλ‹€. μ΄λ•Œ | νŒŒμ΄ν”„λ₯Ό μ‚¬μš©ν•΄ ν•„ν„°λ₯Ό μ μš©ν•œλ‹€.

예λ₯Ό λ“€μ–΄, λ‚ μ§œλ₯Ό νŠΉμ • λ‚ μ§œ 포맷으둜 λ³€κ²½ν•˜κ±°λ‚˜, λ¬Έμžμ—΄μ„ λŒ€,μ†Œλ¬Έμžλ‘œ λ³€κ²½ν•˜λŠ” κΈ°λŠ₯을 ν•  수 μžˆλ‹€.

<!--λ‚ μ§œ 포맷 μ§€μ •-->
{{ createDate|date:"Y-m-d" }}

<!--μ†Œλ¬Έμž λ³€κ²½-->
{{ lastName|lower }}

<!-- 라인 λ³€κ²½ -->
{{ post.text|linebreaksbr }}

λ‚΄μž₯ ν•„ν„° 레퍼런슀 μ—μ„œ 전체 λͺ©λ‘μ„ λ³Ό 수 있으며, ν…œν”Œλ¦Ώ ν•„ν„°λ₯Ό 직접 λ§Œλ“€ 수 μžˆλ‹€.

`` 주석

ν…œν•„λ¦Ώμ—μ„œ 주석ꡬ문은 {# #}이닀.

{# 주석, μ½”λ“œμ— λŒ€ν•œ μ„€λͺ… #}

HTML Escape

HTML λ‚΄μš©μ€‘μ— <,>,',",& κ³Ό 같은 λ¬Έμžλ“€μ΄ 있으면 κ·Έ λ¬Έμžμ— μƒμ‘ν•˜λŠ” HTML Entity둜 λ³€ν™˜ν•΄μ£Όμ–΄μ•Όν•œλ‹€.

ν…œν”Œλ¦Ώμ—μ„œ μ΄λŸ¬ν•œ μž‘μ—…μ„ μžλ™μœΌλ‘œ μ²˜λ¦¬ν•΄μ£ΌκΈ° μœ„ν•΄μ„œ `

ν…œν”Œλ¦Ώ νƒœκ·Έλ‚˜escape` ν…œν”Œλ¦Ώ ν•„ν„°λ₯Ό μ‚¬μš©ν•œλ‹€.

# autoescape νƒœκ·Έ
{% autoescape on %}     
    {{ content }}
{% endautoescape %}

# escape ν•„ν„°
{{ content|escape }}

μ°Έμ‘°

Last updated

Was this helpful?