app/urls.py를 먼저 변경해줘야 돼요.
urlpatterns = [
path('',views.index),
path('post/', views.post_list, name='post_list'),
]
path('post/', views.post_list, name='post_list'),
urlpatterns에 입력해주세요.
from django.shortcuts import render , get_object_or_404
from .models import Post
def index(request):
posts = Post.objects.all()
return render(request , 'app/index.html' , {'posts':posts})
def post_list(request):
post = Post.objects.all()
return render(request, 'app/post_list.html' , {'posts':posts })
app/voews.py 안에 render 뒤에 get_object_or_404를 추가해주세요.
코드를 추가해주세요.
하위 app 폴더에 post_list.html 파일을 추가해주세요.
{% extends 'app/base.html' %}
{% block content %}
<ul>
{% for post in posts %}
<li>
{{ post.text }}
{{ post.published_date }}
</li>
{% endfor %}
</ul>
{% endblock %}
리스트가 보일 수 있게 확장이랑 코딩을 해줘야 돼요.
{% extends 'app/base.html' %}
{% block content %}
<h1><a href="{% url 'post_list' %}">Post 리스트</a></h1>
<ul>
{% for post in posts %}
<li>
{{ post.text }}
{{ post.published_date }}
</li>
{% endfor %}
</ul>
{% endblock %}
그리고 다시 index.html로 돌아와서 a태그 부분을 입력해주세요
이제부터 입력하는 창을 만들어보겠습니다.
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'text']
그전에 상위 app폴더에서 forms.py 파일을 생성해주세요.
그리고 코드를 입력해주세요.
from .models # from 다음에 있는 마침표(.)는 현재 디렉터리 또는 애플리케이션을 의미
(.py 확장자를 붙이지 않아도 내용을 가져올 수 있음)
#forms.ModelFormd은 ModeForm이라는 것을 알려주는 구문
class Meta: #이폼을 만들기 위해서 어떤 model이 쓰여야 하는지 장고에 알려주는 구문
from django.urls import path
from . import views
urlpatterns = [
path('',views.index),
path('post/', views.post_list, name='post_list'),
path('post/new' , views.post_new, name='post_new'),
]
app/urls.py 파일에서 urlpatterns에 path('post/new' , views.post_new, name='post_new'),
코드를 입력해주세요.
from .forms import PostForm
def post_new(request):
form = PostForm(request.POST)
return render(request, 'app/post_edit.html' , {'form' : form})
app/views.py에도 새로운 코드를 입력해주세요.
{% extends 'app/base.html' %}
{% block content %}
<form method="POST" enctype="multipart/form-data" >
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="저장">
</form>
{% endblock %}
하위 app폴더에 post_edit.html 파일을 생성하고 코드를 입력하시면 리스트에서 새 글을 클릭하시면 글쓰기 창이 만들어질 거예요.
폼이 잘 뜨면 반은 성공한 거예요.
path('post/<int:pk>/edit/', views.post_edit, name='post_edit'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
이제 app/urls.py 에서 urlpatterns에 코드를 추가해주세요.
from django.shortcuts import render , get_object_or_404 ,redirect
from .models import Post
from .forms import PostForm
from django.utils import timezone
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
#commit=False가 있는 이유는 바로 저장안함
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
return render(request, 'app/post_edit.html')
def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm(instance=post)
return render(request, 'app/post_edit.html', {'form': form })
def post_detail(request, pk):
post = get_object_or_404(Post,pk=pk)
return render(request, 'app/post_detail.html' , {'post':post})
app/views.py 의 import와 post_new를 변경해주시고, post_edit, post_detail을 추가해주세요.
그리고 저장을 하시면 저장되면서 detail로 넘어가실 거예요.
{% extends 'app/base.html' %}
{% block content %}
<h1><a href="{% url 'post_new' %}" >새글</a></h1>
<ul>
{% for post in posts %}
<li>
<h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1>
{{ post.text }}
{{ post.published_date }}
</li>
{% endfor %}
</ul>
{% endblock %}
app/post_list.html 에서 li안에 a태그를 추가해주세요.
urlpatterns = [
path('',views.index),
path('post/', views.post_list, name='post_list'),
path('post/new' , views.post_new, name='post_new'),
path('post/<int:pk>/edit/', views.post_edit, name='post_edit'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
path('post/<int:pk>/delete', views.post_delete, name='post_delete'),
]
app/urls.py에서 delete path를 추가해주세요.
def post_delete(request, pk):
post = Post.objects.get(id=pk)
post.delete()
return redirect('/post/')
app/views.py에서 post_delete를 추가해주세요.
마지막으로
{% extends 'app/base.html' %}
{% block content %}
<p><a href="{% url 'post_delete' pk=post.pk %}">삭제</a></p>
<a href="{% url 'post_edit' pk=post.pk %}">수정</a>
<div class="post">
{% if post.published_date %}
<div class="date">
{{ post.published_date }}
</div>
{% endif %}
<h1>{{ post.title }}</h1>
<p>{{ post.text|linebreaksbr }}</p>
</div>
{% endblock %}
app/post_detail.html에 삭제, 수정을 추가하시면 추가하시면 삭제 , 수정 기능이 작동해요.
'IT > django(장고)' 카테고리의 다른 글
[django]장고 개발_7 - 회원수정, 회원삭제, class has no objects member 에러해결 (0) | 2019.11.22 |
---|---|
[django]장고 개발_6 - 장고 회원가입, 로그인, 로그아웃 (0) | 2019.11.21 |
[django]장고 개발_4 - index 연결 , 확장 (0) | 2019.11.15 |
[django]장고 개발_3 - 장고 mysql 연결, 모델 생성, 장고 관리자 (0) | 2019.11.15 |
[django]장고 개발_2 - 장고설정, 웹서버 실행, 애플리케이션 생성 (0) | 2019.11.14 |