밑 4가지 뷰를 위한 url endpoint 설정
# urls.py
from django.urls import path
from . import views
app_name = 'todo'
urlpatterns = [
path('vonly/', views.TodoVueOnlyTV.as_view(), name='vonly'),
path('create/', views.TodoCV.as_view(), name='create'),
path('list/', views.TodoLV.as_view(), name='list'),
path('<int:pk>/delete/', views.TodoDelV.as_view(), name='delete'),
]
주어진 Template을 렌더링 하는 기능
예시:
# views.py
class TodoVueOnlyTV(TemplateView):
template_name = 'todo/todo_vue_only.html'
새로운 데이터 생성을 위한 뷰
예시:
# views.py
class TodoCV(CreateView):
model = Todo
fields = '__all__'
template_name = 'todo/todo_form.html'
success_url = reverse_lazy('todo:list')
데이터 리스트를 보여주기 위한 뷰
예시:
# views.py
class TodoLV(ListView):
model = Todo
template_name = 'todo/todo_list.html'
데이터 삭제를 위한 뷰
예시:
# views.py
class TodoDelV(DeleteView):
model = Todo
template_name = 'todo/todo_confirm_delete.html'
success_url = reverse_lazy('todo:list')
<!-- todo_list.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue-Django Todo App</title>
</head>
<body>
<div id="app">
<h1>My Todo App</h1>
<strong>서로 할 일이나 의견을 공유해 봅시다.</strong>
<br>
<ul class="todoList">
{% for todo in object_list %}
<li>
<span>{{ todo.name }}:: {{ todo.todo }}</span>
<span class="removeBtn"><a href="{% url 'todo:delete' todo.id %}">×</a></span>
</li>
{% endfor %}
</ul>
</div>
</body>
</html>
<!-- todo_form.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue-Django Todo App</title>
</head>
<body>
<div id="app">
<h1>My Todo App</h1>
<strong>서로 할 일이나 의견을 공유해 봅시다.</strong>
<br>
<form class="inputBox" action="." method="post"> {% csrf_token %}
<input type="text" class="name" placeholder="name ..." name="name">
<input type="text" class="item" placeholder="type anything ..." name="todo">
<button>ADD</button>
</form>
</div>
</body>
</html>
<!-- todo_confirm_delete.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue-Django Todo App</title>
</head>
<body>
<div id="app">
<h1>Todo delete</h1>
<p>Are you sure to delete {{ object }} ?</p>
<br>
<form action="." method="post"> {% csrf_token %}
<button type="submit">Confirm</button>
</form>
</div>
</body>
</html>