본문 바로가기
코딩(개발)/Django

글 작성

by 플랜데버 2021. 1. 9.

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

댓글