반응형
Django Model-Form
# urls.py
from django.urls import path
from . import views
app_name = "articles"
urlpatterns = [
path('index/', views.index, name="index"),
path('create/', views.create, name="create"),
path('<int:article_pk>/update/', views.update, name="update"),
path('<int:article_pk>/', views.detail, name="detail"),
]
# views.py
from django.shortcuts import render, redirect, get_object_or_404
from .forms import ArticleForm
from .models import Article
# Create your views here.
def index(request):
articles = Article.objects.all()
context = {
'articles' : articles
}
return render(request, 'articles/index.html', context)
def create(request):
if request.method =="POST":
form = ArticleForm(request.POST)
# 사용자로부터 받은 form이 유효하다면 TRUE를 리턴, 아니면 FALSE를 리턴한다.
if form.is_valid():
# article = Article.objects.get(pk=pk)
# form에 담긴 정보가 ArticleForm이고
# ArticleForm은 Article의 정보를 가지고 있다.
article = form.save()
return redirect('articles:index')
else:
form = ArticleForm()
context={
'form' : form
}
return render(request, 'articles/form.html', context)
def update(request, article_pk):
article = Article.objects.get(pk=article_pk)
if request.method=="POST":
form = ArticleForm(request.POST, instance=article)
if form.is_valid():
article = form.save()
return redirect('articles:index')
else:
form = ArticleForm(instance=article)
context={
'form' : form
}
return render(request, 'articles/form.html', context)
def detail(request, article_pk):
article = get_object_or_404(Article, pk=article_pk)
# article = Article.objects.get(pk=article_pk)
context={
'article' : article
}
return render(request, 'articles/detail.html', context)
### index.html
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block body %}
<h1>메인 페이지 입니다.</h1>
<a href="{% url 'articles:create' %}">글 생성</a>
<hr>
{% for article in articles %}
<a href="{% url 'articles:detail' article.pk %}">{{article.title}}</a>
{% endfor %}
{% endblock %}
### form.html
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block body %}
{% if request.resolver_match.url_name == 'create' %}
<h1> 글 생성 </h1>
{% else %}
<h1> 글 수정 </h1>
{% endif %}
<hr>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="제출">
</form>
<a href="{% url 'articles:index' %}">index 페이지 슝</a>
{% endblock %}
### detail.html
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block body %}
<h2>{{ article.pk }}번 째 글^^</h2>
<h3>{{ article.title }}</h3>
<h4>{{ article.content }}</h4>
<hr>
<a href="{% url 'articles:update' article.pk %}">글 수정</a>
<a href="{% url 'articles:index' %}">[back]</a>
{% endblock %}
Django-Bootstrap-4
$ pip install django-bootstrap4
# 각 html에서 불러오기!
$ {% load bootstrap4 %}
- settings.py 에서 부트스트랩사용한다고 설정해주기
- form.html 도 부트스트랩4에 맞게 수정
- base.html 모두 바꿔주기
짜잔!!!
PRACTICE(Movie)
django_review
원래는 html의 form태그에서 경로를 넣어줬는데 경로를 안넣어주면 내 현재 위치로 다시 보내주는 것.
차이점은 method를 POST로 지정해줬기 때문에 action을 비워놔도 된다.
반응형
'웹 프로그래밍 > [ Django ]' 카테고리의 다른 글
[ Django ] 05. Django relation 1:N (사용자 분할) (0) | 2020.08.11 |
---|---|
[ Django ] 04. Django 로그인/회원가입 구현 (0) | 2020.08.11 |
[ Django ] 02. [예습] 전생 알아보기 (0) | 2020.08.11 |
[ Django ] 01. Django ORM 활용 (0) | 2020.08.11 |
[ Django ] 00. Django 알아보기 (4) | 2020.08.11 |