Django

Django 템플릿 필터

UserDonghu 2023. 10. 17. 14:57

앞으로 settings.py 에 다음과 같이 코드를 수정한다.

LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'

 

템플릿 필터 : 템플릿에서 데이터를 형식화하고 변환 가능

 

만약에 블로그 게시물들을 아래와 같이 posts로 템플릿에 보낸다면,

def postlist(request):
    posts = Post.objects.all()
    return render(request, 'blog/postlist.html', {'posts':posts})

 

템플릿 필터는 이렇게 쓸 수 있다.

{% for i in posts %}
    <p>{{i.id}}</p>
    <p>{{i.title}}</p>
    <p>대문자 : {{i.content|upper}}</p>
    <p>소문자 : {{i.content|lower}}</p>
    <p>줄바꿈안함 : {{i.content}}</p>
    <p>줄바꿈 : {{i.content|linebreaks}}</p>
    <p>말줄임 : {{i.content|truncatewords:3}}</p>
    <p>글자줄임 : {{i.content|truncatechars:10}}</p>
    <p>슬라이싱 : {{i.content|slice:":10"}}</p>
    <p>공백 병합(join) : {{i.content|join:"-"}}</p>
    <p>길이 : {{i.content|length}}</p>
    <p>태그 없애기 : {{i.content|striptags}}</p>
    <p>문자열에 더하기 : {{i.content|add:"!"}}</p>
    <p>변수로 추가하기 : {{i.content|add:i.title}}</p>
    <p>날짜 형식 바꾸기 : {{i.created_at|date:"y!!m!!d"}}</p>
    <p>날짜 형식 바꾸기 : {{i.created_at|date:"Y-M-D"}}</p>
    <p>필터 중첩 : {{i.content|upper|linebreaks|truncatewords:10}}</p>
    <hr>
{% endfor %}

 

for문 안에서는 이런 것도 쓸 수 있다.

{% for i in posts %}
    <h1>{{ i.title }}</h1>
    <p>{{ i.content }}</p>
    <p>for문을 몇번째 반복인가 : {{ forloop.counter }}</p>
    <p>for문을 0부터 count : {{ forloop.counter0 }}</p>
    <p>for문을 101부터 count : {{ forloop.counter|add:100 }}</p>
    <p>for문을 거꾸로 count : {{ forloop.revcounter }}</p>
    <p>for문의 첫번째인가? : {{ forloop.first }}</p>
    <p>for문의 마지막인가? : {{ forloop.last }}</p>
    <hr>
{% endfor %}

 

템플릿에서 변수 할당 (자주 안씀)

{% with value='hello world' %}
    <h1>{{value}}</h1>
{% endwith %}

 

주석

{# 주석내용 #}

{% comment %}
여러줄 주석은 이렇게
{% endcomment %}

 

path("client/<int:id>/", app_views.client, name="app-views-client") 일때 url

{% url 'app-views-client' client.id %}

 

Django의 이스케이프 기능 비활성화하는 법 (주의)

(글자 그대로 나오지않고, 태그나 스크립트가 적용됨.)

{% for i in posts %}
    <p>{{i.content|safe}}</p>
{% endfor %}

{% for i in posts %}
    {% autoescape off %}
    <p>{{i.content}}</p>
    {% endautoescape %}
{% endfor %}

 

markdown문법 사용

pip install django-markdown-deux, settings.py에 'markdown_deux' app 등록

{% load markdown_deux_tags %}
{% for i in posts %}
    <p>{{ i.content | markdown }}</p>
{% endfor %}