blog > views.py
코드 추가
로그인 한 사람만 글 작성 가능
from django.shortcuts import render
from blog.models import Category,Post
from django.views import generic
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import CreateView
# Create your views here.
def index(req):
post_latest = Post.objects.order_by("-createDate")[:6] #최근 작성된 순 6개 가져온다
context = {
"post_latest":post_latest # post_latest 라는 이름으로 index 페이지에 전달한다.
}
return render(req, "index.html", context=context)
# 장고에서 제공하는 post로 요청한 상세페이지 보기
class PostDetailview(generic.DetailView):
model = Post
# 로그인을 위한
class PostCreate(LoginRequiredMixin, CreateView):
model = Post
fields = ["title" , "title_image" , "content" , "category"]
blog > blog > post_form.html 생성
1. post_detail.html 파일 내용 복사 후
2. 컨텐츠 있는 부분 아래 코드로 변경
<h2 class="mb-3">새 글 작성하기</h2>
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="작성완료">
</form>
위 페이지에 접근 할 수 있는 url 규칙 만들기
blog > urls.py 아래 코드 추가
path("post/create", views.PostCreate.as_view(), name="post_create"),
페이지에 접근 할 수 있는 링크 생성(로그아웃시 로그인 페이지로 이동)
template > index.html
{% if user.is_authenticated %}
<a class="dropdown-item" href="{% url 'post_create' %}">글작성</a>
{% else %}
<a class="dropdown-item" href="/admin' %}">로그인</a>
{% endif %}
글 작성 페이지 좀더 이쁘게~
Ctrl + c -> 서버 중지
pip install django-widget-tweaks 설치하고
mywebsite > settings.py
'widget_tweaks', 추가
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.apps.BlogConfig',
'widget_tweaks',
]
부트스트랩에서 css only 복사
<!-- CSS only --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
index.html , post_form.html에 위 코드 붙여넣기
{% load static %}
<!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
post_form.html 파일 수정
<table>
{{ form.as_table }}
</table>
위 코드를 아래 코드로 수정
{% load widget_tweaks %}
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{% for field in form.visible_fields %}
<div class="form-group">
<label for={{field.id_for_label}}>{{field.label}}></label>
{{field|add_class:'form-control'}}
{% for error in field.errors %}
<span class="help-block">{{error}}</span>
{% endfor%}
</div>
{% endfor %}
<input type="submit" value="작성완료">
</form>
인클루드 만들기
base_generic.html
index.html 파일에 있는내용 복사 한 후 공통으로 쓸 부분 남겨두고
{% block content %}
{% endblock %}
index.html / post_detail.html / post_form.html 에 필요한내용(컨텐츠) 빼고 공통되는 부분에 아래 코드 작성
{% extends "base_generic.html" %}
{% block content %}
{% load static %}
각 페이지 컨텐츠
{% endblock %}
'코딩(개발) > Django' 카테고리의 다른 글
홈페이지 제작 실습 STEP 1 (앱추가및연결) (0) | 2021.01.16 |
---|---|
장고개발을 위한 VS CODE 설정 (0) | 2021.01.10 |
admin 셋팅 및 DB 입출력 (0) | 2021.01.08 |
static 파일 설정 (0) | 2021.01.08 |
Django 설치 및 기본 셋팅 (0) | 2021.01.07 |
댓글