Study Anything 🧐

μ„œν‰ μž‘μ„± (3) - μ„œν‰ 상세보기 λ³Έλ¬Έ

ν”„λ‘œμ νŠΈ/[Web] μ„œν‰ μž‘μ„± μ‚¬μ΄νŠΈ

μ„œν‰ μž‘μ„± (3) - μ„œν‰ 상세보기

솔 2022. 1. 14. 00:05

μ§€κΈˆκΉŒμ§€ μ„œν‰ λͺ©λ‘λ“€μ„ 리슀트둜 전체 μ‘°νšŒν•˜λŠ” νŽ˜μ΄μ§€μ™€ κΈ€μ“°κΈ° νŽ˜μ΄μ§€λ₯Ό κ΅¬ν˜„ν–ˆλ‹€.

μ΄λ²ˆμ—λŠ” μ„œν‰ λͺ©λ‘μ—μ„œ ν•˜λ‚˜λ₯Ό μ„ νƒν–ˆμ„ λ•Œ ν•΄λ‹Ήν•˜λŠ” μ„œν‰μ˜ 상세 νŽ˜μ΄μ§€λ₯Ό κ΅¬ν˜„ν•˜λ €κ³  ν•œλ‹€.

 

 

 

(1) list 파일 보기

파일 > templates/review/list.html

<li><a href="/review/detail/{{ review.reviewId }}/">
    <div>
        ... <!--μ„œν‰ λͺ©λ‘ 쑰회-->
    </div>
</a></li>

DBμ—μ„œ μ„œν‰ λͺ©λ‘μ„ λ°›μ•„μ™€μ„œ νŽ˜μ΄μ§€μ— λ„μš°λŠ” list.html μ½”λ“œ 쀑 일뢀이닀.

각각의 μ„œν‰μ„ <a> νƒœκ·Έλ‘œ 감싸 ν•΄λ‹Ή λ‚΄μš©μ„ μ„ νƒν•˜λ©΄ μ„œν‰μ˜ 상세 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λ„λ‘ κ΅¬ν˜„ν•˜λ €κ³  ν•œλ‹€.

ν•΄λ‹Ή μƒμ„ΈνŽ˜μ΄μ§€μ˜ url 은 "http://κΈ°λ³Έμ£Όμ†Œ/review/detail/μ„œν‰Id" 둜 μ„€μ •ν–ˆλ‹€.

 

 

 

(2) urls.py 파일 μˆ˜μ •

파일 > review/urls.py

urlpatterns = [
    ...
    path('detail/<int:reviewId>/', views.detail, name='detail'),
    ...
]

url νŒŒμΌμ— μƒμ„ΈνŽ˜μ΄μ§€ url 을 μΆ”κ°€ν•΄μ£Όμ—ˆλ‹€. detail/ λ‹€μŒ 뢀뢄이 μ„œν‰Id μ΄λ―€λ‘œ <int:reviewId> 라고 ν‘œκΈ°ν–ˆλ‹€.

(* reviewId 의 μžλ£Œν˜•μ€ intν˜•μ΄λ‹€. 이전 κΈ€-λͺ¨λΈ 생성 λΆ€λΆ„- μ°Έκ³ )

 

 

 

(3) views.py 파일 μˆ˜μ • - ν•¨μˆ˜ μž‘μ„±

파일 > review/views.py

def detail(request, reviewId):
    # μ„ νƒν•œ 리뷰 좜λ ₯
    review = Review.objects.get(reviewId=reviewId)
    user = User.objects.get(userId=review.userId)
    context = {'review': review, 'user': user}
    return render(request, 'review/detail.html', context)

urls.py μ—μ„œ reviewId λ₯Ό λ³€μˆ˜λ‘œ λ°›μ•˜κΈ° λ•Œλ¬Έμ— κΈ°μ‘΄κ³Ό λ‹€λ₯΄κ²Œ views.py 의 ν•¨μˆ˜μ— reviewId λ§€κ°œλ³€μˆ˜κ°€ μΆ”κ°€λ˜μ—ˆλ‹€.

ν•¨μˆ˜λ‘œ 받은 reviewId λ₯Ό 톡해 μ„œν‰ ν…Œμ΄λΈ”μ—μ„œ ν•΄λ‹Ή μ„œν‰μ„ 가져와 μƒˆλ‘œμš΄ λ³€μˆ˜μ— λ„£κ³ ,

μ„œν‰ DBμ—μ„œ μœ μ € DB의 userIdλ₯Ό μ™Έλž˜ν‚€(FK)둜 μ‚¬μš©ν•˜λ―€λ‘œ μœ μ € DBμ—μ„œλ„ ν•΄λ‹Ή μœ μ €μ˜ 정보λ₯Ό κ°€μ Έμ˜¨λ‹€.

그런 λ‹€μŒ context 에 μ„œν‰κ³Ό (μ„œν‰μ„ μž‘μ„±ν•œ) μœ μ € 데이터λ₯Ό λ„£κ³  μ„œν‰ μƒμ„ΈνŽ˜μ΄μ§€λ₯Ό κ΅¬ν˜„ν•  html νŒŒμΌμ— λ„˜κ²¨μ€€λ‹€.

 

 

 

(4) detail.html μž‘μ„±

파일 > templates/review/detail.html

{% if review %}
    <h4>μ±… ISBN: {{ review.bookId }}</h4>
    <h4>μž‘μ„±μž: {{ user.userName }}</h4>
    <h4>μ„œν‰Id: {{ review.reviewId }}</h4>
    <div>
        {{ review.reviewTxt }}
    </div>
{% else %}
    <p>μ„œν‰μ΄ μ—†μŠ΅λ‹ˆλ‹€.</p>
{% endif %}

λ„˜κ²¨λ°›μ€ 데이터λ₯Ό 톡해 html μ—μ„œ μ„œν‰ λ‚΄μš©μ„ λ„μš΄λ‹€.

ν˜Ήμ‹œ λ„˜κ²¨λ°›μ€ 데이터(μ„œν‰)κ°€ 없을 경우λ₯Ό λŒ€λΉ„ν•΄ 쑰건문을 μΆ”κ°€ν•˜κ³ ,

데이터가 μžˆλ‹€λ©΄ ν•΄λ‹Ή λ‚΄μš©λ“€μ„ νŽ˜μ΄μ§€μ— λ„μš°λ„λ‘ ν•œλ‹€.

 

 

 

(5) κ²°κ³Όν™”λ©΄

μ„œν‰ μƒμ„ΈνŽ˜μ΄μ§€

μœ„μ˜ 과정을 거치면 λ‹€μŒμ˜ κ²°κ³Ό νŽ˜μ΄μ§€λ₯Ό 얻을 수 μžˆλ‹€.

 

 

 

μ§€κΈˆκΉŒμ§€ μ„œν‰ λͺ©λ‘ 쑰회, κΈ€μ“°κΈ° ν›„ μ„œν‰ DB에 데이터 μΆ”κ°€ν•˜κΈ°, μ„œν‰ 상세보기 의 κΈ°λŠ₯듀을 κ΅¬ν˜„ν•΄λ³΄μ•˜λ‹€.

μ„Έ κΈ°λŠ₯이 λͺ¨λ‘ κ³΅ν†΅μ μœΌλ‘œ urls.py, views.py, (이름).html 의 νŒŒμΌμ„ μˆ˜μ •ν•˜κ³  μƒμ„±ν•˜λ©΄μ„œ κ΅¬ν˜„λ˜λŠ” 것을 μ•Œ 수 μžˆμ—ˆλ‹€.

μž₯고의 μž₯점이 κ°„νŽΈν•˜κ²Œ νŽ˜μ΄μ§€λ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ ν•˜λŠ” 것이라고 ν–ˆλŠ”λ° μ •λ§λ‘œ κ°„λ‹¨ν•˜κ²Œ μ—¬λŸ¬ κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆμ—ˆλ‹€.

λ‹€λ§Œ 우리 ν”„λ‘œμ νŠΈλŠ” ν”„λ‘ νŠΈμ—”λ“œμ™€ λ°±μ—”λ“œκ°€ λ‚˜λˆ μ Έμžˆκ³ , ν”„λ‘ νŠΈλŠ” λ¦¬μ•‘νŠΈ(React)둜 κ΅¬ν˜„ν•˜κΈ° λ•Œλ¬Έμ—

λ‹€μŒ λ‹¨κ³„λ‘œλŠ” μž₯고둜 κ΅¬ν˜„ν•œ 이 κΈ°λŠ₯λ“€κ³Ό λ¦¬μ•‘νŠΈλ₯Ό μ—°κ²°ν•  μ˜ˆμ •μ΄λ‹€.

 

μž₯κ³ λ₯Ό 이번 ν”„λ‘œμ νŠΈλ‘œ 처음 μ ‘ν–ˆλŠ”λ° 쒋은 μžλ£Œλ“€μ΄ λ§Žμ•„μ„œ μ°Έκ³ ν•˜λ©΄μ„œ 잘 μ‚¬μš©ν•΄λ³Έ 것 κ°™λ‹€.

μ•žμœΌλ‘œ 계속 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 더 λ‹€μ–‘ν•˜κ²Œ μ ‘ν•΄λ³Ό 수 있으면 μ’‹κ² λ‹€.

 

 

 

 

728x90
Comments