`!`를 누르면 html뼈대를 불러올 수 있습니다.
보일러 플레이트 코드란?
그리고 Bootstrap이 제공하는 css를 import합니다.
base.html을 원하는 템플릿에 extends 함으로써 [상속](링크)할 수 있습니다.
+ jQuery같은 경우도 script부분을 import 해놓으면 똑같이 상속할 수 있습니다.
마진이 없으니 이상합니다.
class container를 <body>에 입력해줍니다.
<body class="container">
여백이 생겼습니다.
admin페이지로 돌아와 article들을 몇개 더 생성해 줍니다
dinner.html 페이지와 연결되는 urls path 경로는 views.dinner와 연결됩니다.
# urls.py
path('dinner/<str:name>/', views.dinner), views.py/dinner
]
model 받아오기 위해 같은 폴더안의 models.py를 import 해주겠습니다.
# models.py
from django.db import models
# Create your models here.
class Article(models.Model): # 상속
# 기본키(Primary Key=PK) "id(PK)"와 "created_at" field는
# django.db에서 import되어 db에 자동으로 생성됩니다.
title = models.CharField(max_length=10)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
앱이름.models
형식으로 가능합니다.import random
from django.shortcuts import render
>>from .models import Article
장고 쿼리문 참고하기
데이터를 불러오는 여러 쿼리문이 있습니다. 공식문서를 참고하면서 작성하겠습니다.
# dinner views
def dinner(request, name):
...
>>articles = Article.objects.all()
context = {
'pick': pick,
'name': name,
'menus': menus,
>>'articles': articles,
}
불러올 데이터 모델의 변수를 articles로 선언 해줍니다.
모든 Article을 불러옵니다.
{% endif %}
<h1>어떤 게시글 기능올 불러올 곳입니다</h1>
{% for article in articles %}
<p>글 번호: {{ article.pk }}</p>
<p>글 제목: {{ article.title }}</p>
<p>글 내용: {{ article.content }}</p>
<hr /> <!-- 구분선입니다 -->
{% endfor %} {% endblock %}
HTML 속성 참고하기
새로운 페이지로 연결 시켜 보겠습니다.
{% extends 'base.html' %} {% block content %}
<!-- Bootstrap css 사용을 위한 class입니다 -->
<form
class="form-group"
action="{% url 'articles:create_review' %}"
method="POST"
>
{% csrf_token %}
<label for="title">제목은: </label>
<!-- 입력창 -->
<input class="form-control" type="text" name="title" /><br />
<label for="content">내용은: </label>
<textarea class="form-control" name="content" cols="30" row="5"></textarea
><br />
<!--제출버튼-->
<input type="submit" />
</form>
{% endblock %}
title
과 content
를 연결하고 제목과 내용을 입력하면 저장될 수 있도록합니다.
#views.py
from django.shortcuts import render, >>redirect #redirect를 추가해줍니다
import random
from .models import Article
...
...
def create_review(request):
content = request.POST.get('content')
>>title = request.POST.get('title')
>>article = Article(title=title, content=content)
>>article.save() # 저장
# context는 DB 모델을 활용하면 필요하지 않습니다
# context = {
# 'content': content,
# }
# return render(request, 'review_result.html')
# 리뷰작성이 완료되면 생성된 list 페이지를 보여주어야 합니다.
# 아래 redirect를 사용한 식으로 바꾸어줍니다
>>return redirect('/articles/dinner/무언가/')
페이지는 잘 연결되었지만 최근에 작성된 순서대로 배치되지 않았습니다.
게시글을 가장 최근에 입력된 순서로 배치해보겠습니다.
# dinner views
def dinner(request, name):
...
#articles = Article.objects.all() #모든Article불러옵니다
>>articles = Article.objects.order_by('-pk') #pk의 역순(즉 게시id역순)
게시글을 클릭하면 상세페이지로 이동하도록 설계해보겠습니다.
방법으로는 이전에 사용했던 path variable(경로 변수)
를 사용하겠습니다.
게시글 번호를 받아서 url에 번호를 입력하면 해당 페이지로 이동하게 됩니다.