Django Template Engine
은 장고 웹 프레임워크의 일부로 동적인 HTML을 생성하는데에 사용됩니다.
동적인 HTML을 생성하기 위해선 자바스크립트가 필요하지만 Django Template Engine을 이용해 자바스크립트 없이 HTML에 장고 템플릿 언어를 통해 HTML 문서 안에서 파이썬 코드를 작성하거나 파이썬 객체에 접근할 수 있게 해줍니다.
1. 동적 HTML 생성
장고 탬플릿 언어를 사용해 데이터를 가져와 동적인 HTML을 생성할 수 있습니다.
2. 태그와 필터
Django Template Engine은 다양한 태그와 필터를 제공합니다.
for
,if
등 다양한 태그와add
,date
등의 필터를 이용해 데이터를 쉽게 제어, 조작하는게 가능합니다.태그는
{% 태그 %}
로 작성할 수 있고 필터의 경우{{변수|필터}}
와 같이 작성할 수 있습니다.
3. 탬플릿 상속
여러 탬플릿에 공통적으로 사용되는 HTML이 있다면 해당 템플릿을 상속받아 상속받은 탬플릿에서 추가적으로 작성해야할 부분만 추가 작성해 중복코드 사용을 줄이고 유지보수를 용이하게 만들어 줍니다.
일반적으로 CRUD에서 사용되는 HTTP Method는 다음과 같습니다.
Create: Post
Read: GET
Update: PUT
, PATCH
Delete: DELETE
HTML form의 경우 GET과 POST만 지원하고 있기에 update와 delete 동작을 취하는 경우에도 POST 메서드를 사용해야하며 PUT, PATCH, DELETE 등의 메서드를 이용하기 위해서는 DRF(Django Rest FrameWork)를 사용해 이용할 수 있습니다.
예시는 DRF를 사용하지 않은 예시입니다.
먼저 Article
이라는 모델이 이미 생성되어 있다고 가정하고 view를 작성해 보겠습니다.
def article_create(request):
if request.method == "POST":
form = ArticleForm(request.POST)
if form.is_valid():
form.save()
return redirect('article_list')
else:
form = ArticleForm()
return render(request, 'articles/article_form.html', {'form': form})
READ에서 GET요청을 명시적으로 기재하지 않은 이유는 대부분의 웹 요청은 GET메서드를 사용하고 form에서는 GET과 POST밖에 없기에 POST요청이 들어올때만 조건문을 이용해 POST요청을 명시하고 GET은 명시하지 않았습니다.
def article_list(request):
articles = Article.objects.all()
return render(request, 'articles/article_list.html', {'articles': articles})
def article_update(request, pk):
article = get_object_or_404(Article, pk=pk)
if request.method == "POST":
form = ArticleForm(request.POST, instance=article)
if form.is_valid():
form.save()
return redirect('article_list')
else:
form = ArticleForm(instance=article)
return render(request, 'articles/article_form.html', {'form': form})
def article_delete(request, pk):
article = get_object_or_404(Article, pk=pk)
if request.method == 'POST':
article.delete()
return redirect('article_list')
return render(request, 'articles/article_confirm_de
이렇게 views.py의 작성이 끝난 뒤에 urls.py를 작성해 보겠습니다.
from django.urls import path
from .views import article_list, article_create, article_update, article_delete
urlpatterns = [
path('articles/', article_list, name='article_list'),
path('articles/create', article_create, name='article_new'),
path('articles/<int:pk>/update/', article_update, name='article_edit'),
path('articles/<int:pk>/delete/', article_delete, name='article_delete'),
]
정말 좋은 글 감사합니다!