DevHyun

[DevHyun's Blog] Django&Python으로 만든 Blog App 확장(extending)하기 본문

Web/Django&Python Blog Projecct

[DevHyun's Blog] Django&Python으로 만든 Blog App 확장(extending)하기

D3V3L0P3R 2020. 10. 19. 19:38

장고걸스 코치들과 자원봉사자들의 수고로 번역된 글을 참고하였습니다.

tutorial.djangogirls.org/ko

 

 

Template을 확장하였으니 Blog App 자체도 확장해보겠습니다~!

 

1. Post에 Template 링크 추가하기

*Blog/templates/Blog/post_list.html

{% extends 'Blog/base.html' %}

{% block content %}
    {% for post in posts %}
        <div class="post">
            <div class="date">
                {{ post.published_date }}
            </div>
            <h1><a href="">{{ post.title }}</a></h1>
            <p>{{ post.text|linebreaksbr }}</p>
        </div>
    {% endfor %}
{% endblock %}

 

2. Title을 보여주고 Title을 클릭하면 Post의 상세페이지로 이동하는 기능 추가하기

*Blog/templates/Blog/post_list.html

* {% %}는 장고 템플릿 태그

* post_detail의 view 경로

* view.py에서 정의된 함수 명(post_detial)

* pk라는 필드를 추가해 새로운 Post가 추가될 때마다 그 값이 1,2,3 으로 증가

... 
.. 
. 
        <div class="post"> 
... 
.. 
.
                      <h1><a href="{% url 'post_detail' pk=post.pk %}"> {{ post.title }} </a> </h1>
... 
.. 
. 
        </div> 
... 
.. 
.

 

3. Run - > NoReverseMatch at / Reverse for 'post_detail' with arguments '()' and keyword arguments {'pk' :"}' not found Error 발생

* Post_detail view를 만들지 않아서 발생하는 Error

 

4. blog/urls.py파일에 URL을 만들어, Django가 post_detail 로 보내, Post가 보일 수 있게 하기 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'),
]

* post/란 URL이 post 문자를 포함해야 한다는 의미.

* <int:pk> 뜻은 정수(int) 값을 기대하고 이를 pk라는 변수로 view로 전송하는 것을 의미.

* /은 다음에 / 가 한 번 더 와야 한다는 의미.

 

* 브라우저에 http://127.0.0.1:8000/post/5/라고 입력하면, Django는 post_detail view를 찾아 매개변수 pk가 5인 값을 찾아 view로 전달.

 

 

5. Run -> AttributeError at / 'module' object has no attribute 'post_detial' Error 발생

* View가 추가되지 않았고 View에 매개변수 pk를 추가해야 함.

 

Post.objects.get(pk=pk)

 

6. DoesNotExist at /post/10/ Post matching query does not exist Error 발생 할 수 있음

* 해당 primary key(pk) Post를 찾지 못할 때 발생

 

7. views.py 파일에 Django에서 제공하는 get_object_or_404 기능 추가

*pk에 해당하는 Post가 없을 경우, 페이지 찾을 수 없음 404 : Page Not Found 404를 보여주는 기능.

*Blog/views.py

from django.utils import timezone
...
..
.
from django.shortcuts import render, get_object_or_404

def post_list(request):
...
..
.
def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    return render(request, 'Blog/post_detail.html', {'post': post})

 

 

8. run-> TemplateDoesNotExist at /post/3/ blog/post_detail.html Error 발생

* post_detail.html Template 파일이 없어서 발생하는 Error!

 

9. Post_detail.html tamplate 생성

*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 %}
        <h1>{{ post.title }}</h1>
        <p>{{ post.text|linebreaksbr }}</p>
    </div>
{% endblock %}

 

10. run -> commit -> push

 

11. pythonanywhere 에서 재배포 하기

d3v3lop3r.tistory.com/18

 

Pythonanywhere 에서 Git Project Pull 한 후 재배포 하기

장고걸스 코치들과 자원봉사자들의 수고로 번역된 글을 참고하였습니다. tutorial.djangogirls.org/ko Blog App에서 수정사항이 있을경우 Pycharm에서 Commit-Push 한 후에 Pythonanywhere에서 pull 해줘야 동기화..

d3v3lop3r.tistory.com

12. devhyun.pythonanywhere.com/

 

DevHyun's blog

published: Oct. 19, 2020, 10:37 a.m. Test text published: Oct. 19, 2020, 1:38 p.m. Wow published: Oct. 19, 2020, 1:41 p.m. AnonymousAnonymousAnonymousAnonymousAnonymousAnonymousAnonymousAnonymousAnonymousAnonymousAnonymousAnonymousAnonymous published: Oct.

devhyun.pythonanywhere.com

완-벽

Comments