글을 작성하기
폼 생성
- 모델(model)을 이용하면 ModelForm을 생성하여 자동으로 모델에게 결과물을 저장할 수 있음.
- form model을 import, Post model도 import
- PostForm : 만들 폼의 이름. 매개변수로 ModelForm이라는 것을 알려줌
- class Meta : 어떤 model을 사용해 폼을 만들지 알려줌(medel = Post)
- 폼의 필드를 넣어줌
#blog/forms.py
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('title', 'text',)
base.html 탬플릿 수정
- 뷰의 이름이 post_new이며, "더하기 기호"가 보임
#blog/templates/blog/base.html
{% load static %}
<html>
<head>
<title>Django Girls blog</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link href='//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="{% static 'css/blog.css' %}">
</head>
<body>
<div class="page-header">
<!-- 아래줄이 추가된 부분 -->
<a href="{% url 'post_new' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a>
<h1><a href="/">Django Girls Blog</a></h1>
</div>
<div class="content container">
<div class="row">
<div class="col-md-8">
{% block content %}
{% endblock %}
</div>
</div>
</div>
</body>
</html>
URL 수정
#blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
# 아래 줄이 추가된 부분
path('post/new/', views.post_new, name='post_new'),
]
veiws 수정
- 폼을 추가하기 위해서 PostForm 함수를 호출
#blog/views.py
from .forms import PostForm
from django.shortcuts import redirect
def post_new(request):
if request.method == "POST":
form = PostForm(request.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()
return render(request, 'blog/post_edit.html', {'form': form})
새로운 탬플릿 추가
#blog/templates/blog/post_edit.html
{% extends 'blog/base.html' %}
{% block content %}
<h1>New post</h1>
<form method="POST" class="post-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Save</button>
</form>
{% endblock %}
글을 수정하기
탬플릿 수정
#blog/templates/blog/post_detail.html
{% extends 'blog/base.html' %}
{% block content %}
<div class="post">
{% if post.published_date %}
<div class="date">
{{ post.published_date }}
</div>
{% endif %}
<!-- 아래줄 추가됨-->
<a class="btn btn-default" href="{% url 'post_edit' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"></span></a>
<h1>{{ post.title }}</h1>
<p>{{ post.text|linebreaksbr }}</p>
</div>
{% endblock %}
URL 추가
path('post/<int:pk>/edit/', views.post_edit, name='post_edit'),
탬플릿 추가
- 기존 post_edit 탬플릿을 재사용
views 추가
#blog/views.py
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, 'blog/post_edit.html', {'form': form})
'개발 > 파이썬' 카테고리의 다른 글
djangogirls 요약정리 (0) | 2020.11.17 |
---|---|
djangogirls | 7. 애플리케이션 확장 (0) | 2020.10.31 |
djangogirls| 6. ORM, QuerySets : 데이터베이스 연결 (0) | 2020.10.29 |
djangogirls | 5.urls, view, 템플릿(html) (0) | 2020.10.29 |
djangogirls | 4. 모델, 모델을 위한 테이블, admin (0) | 2020.10.29 |