Django

Django urls.py 에서 파라미터 호출하기

- Django 블로그 만들기

Jan. 11, 2023, 10 p.m.

안녕하세요?

지난 포스트에서는 model을 이용하여 블로그 포스트(Article)을 작성하였고,

이를 메인 화면에 뿌려줬습니다.

하지만 메인화면에서 포스트를 클릭했을 때, 자세히 보는 화면에 연결이 안되었는데요,

오늘은 이 부분을 작업해보겠습니다.

 

urls.py 파일 수정

먼저, blog 폴더 밑에 있는 urls.py 파일에 아래와 같이 post 관련 부분을 추가합니다.

urlpatterns = [
    path('', views.index),
    path('index', index, name='index'),
    path('post/<slug>/', post, name='post'),

]

 

그리고 TestProject 밑에 있는 urls.py 파일에는 헷갈리지 않도록 post 부분을 지워줍니다.

#TestProject/urls.py

from django.contrib import admin
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
from .views import *


urlpatterns = [
    path('', views.index),
    path('index', index, name='index'), 
    path('about', about, name='about'), 
    path('contact', contact, name='contact'), 
    path('admin/', admin.site.urls),

]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

 

 

views.py 파일 수정

blog 폴더 밑에 views.py 파일에 아래와 같은 함수를 추가합니다.

def post(request, slug):
    article = Article.objects.get(article_slug=slug)
    return render(request, 'post.html', {'article':article})                 

여기서 slug 변수는 urls.py 에서 보내주는 파라미터로, 각 Article의 요약된 제목같은 정보입니다.

Article.objects.get(article_slug=slug) 부분은 slug 변수에 해당하는 article 을 가져오는 부분입니다.

 

post.html 파일 수정

post.html 파일을 열고 <head> 태그 사이에 아래와 같이 title 지정을 위한 부분을 추가합니다.

<head>
    <title>{{article.title}}</title>
</head>

아래와 같이 <body> 태그의  <!-- Page Header-->주석 아래를 수정해줍니다.

<!-- Page Header-->
        <header class="masthead" style="background-image: url('assets/img/post-bg.jpg')">
            <div class="container position-relative px-4 px-lg-5">
                <div class="row gx-4 gx-lg-5 justify-content-center">
                    <div class="col-md-10 col-lg-8 col-xl-7">
                        <div class="post-heading">
                            <h1>{{article.title}}</h1>
                            <h2 class="subheading">{{article.subtitle}}</h2>
                            <span class="meta">
                                Posted by
                                <a href="#!">Sanlab</a>
                                {{article.published}}
                            </span>
                        </div>
                    </div>
                </div>
            </div>
        </header>
        <!-- Post Content-->
        <article class="mb-4">
            <div class="container px-4 px-lg-5">
                <div class="row gx-4 gx-lg-5 justify-content-center">
                    <div class="col-md-10 col-lg-8 col-xl-7">
                        {{article.content}}
                    </div>
                </div>
            </div>
        </article>
        <!-- Footer-->

 

저장한 후에 다시 블로그에서 포스트를 클릭해보면 아래와 같이 저장한 데이터의 포스트가 조회되는 것을 볼 수 있습니다.

 

 

다음 번 포스트에서는, 

현재 화면 상단의 메뉴버튼이나 홈 버튼 등은 모든 페이지에서 공통으로 보이는데,

각 html마다 하드코딩이 되어있습니다.

이 부분을 좀 더 효율적으로 코딩하기 위한 방법을 익혀보겠습니다.

Reference


Project

Comments


Related Posts