6. ์ง๋ฌธ ๋ชฉ๋ก + ํ ํ๋ฆฟ ๋๋ ํฐ๋ฆฌ + ํ ํ๋ฆฟ ํ์ผ + ํ ํ๋ฆฟ ํ๊ทธ ์ ํ + views.py + urls.py + ์ค๋ฅ ํ์ด์ง์ ์๋ต ์ฝ๋
# ์ง๋ฌธ ๋ชฉ๋ก
: http://localhost:8000/pybo/ ํ์ด์ง๋ฅผ ์์ฒญํ์ ๋ ์ง๋ฌธ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ
1. pybo/views/py ํ์ผ์ index ํจ์๋ฅผ ์๋๊ฐ์ด ๋ฐ๊พผ๋ค.
+ ์ง๋ฌธ ๋ชฉ๋ก์ ๋ฐ์ดํฐ๋ Question.objects.order_by('-create_date') ๋ก ์ป์ ์ ์์
+ order_by('-create_date') --> ์์ฑ ์ผ์๋ฅผ ์ญ์(=์ต์ ์)์ผ๋ก ์ ๋ ฌ ( ์ฌ๊ธฐ์ ๋ง์ด๋์ค( - ) ๊ธฐํธ๊ฐ ์์ผ๋ฉด ์ญ๋ฐฉํฅ, ์์ผ๋ฉด ์๋ฐฉํฅ ์ ๋ ฌ )
+ render ํจ์ : ํ์ด์ฌ ๋ฐ์ดํฐ๋ฅผ ํ ํ๋ฆฟ์ ์ ์ฉํ์ฌ HTML๋ก ๋ณํํ๋ ํจ์
+ ํ ํ๋ฆฟ(Template) ํ์ผ : ํ์ด์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ์ธ ์ ์๋ HTML ํ์ผ (ex. pybo/question_list.html)
# ํ ํ๋ฆฟ ๋๋ ํฐ๋ฆฌ
1. ํ ํ๋ฆฟ ํ์ผ์ ์ ์ฅํ ๋๋ ํฐ๋ฆฌ ๋ง๋ค๊ธฐ --> config/settings.pyํ์ผ์ TEMPLATES ํญ๋ชฉ ์ค์
+ DIRS ๋ ํ ํ๋ฆฟ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ค์ ๋ฑ๋กํ ์ ์๊ฒ๋ ํ๊ธฐ ์ํด ๋ฆฌ์คํธ๋ก ๋์ด์์
+ ์ถ๊ฐํ ๋๋ ํฐ๋ฆฌ์ ์ ์ฒด ๊ฒฝ๋ก
: c:\projects\mysite\templates
--> BASE_DIR / 'templates'์์ BASE_DIR ์ c:\projects\mysite ์ด๊ธฐ ๋๋ฌธ
2. ๋ช ๋ น ํ๋กฌํฌํธ์์ ์์์ ์ถ๊ฐํ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
# ํ ํ๋ฆฟ ํ์ผ
- render ํจ์์์ ์ฌ์ฉํ ํ ํ๋ฆฟ ํ์ผ๋ช : pybo/question_list.html
- question_list.html ํ์ผ์ด ์ ์ฅ๋ ๊ฒฝ๋ก : projects/mysite/templates/pybo/question_list.html
- pybo/question_list.htmlํ์ผ์ ์๋์ ๊ฐ์ด ์์ฑ
+ ํ ํ๋ฆฟ ํ๊ทธ : {%, %}์ผ๋ก ๋๋ฌ์ธ์ธ ๋ฌธ์ฅ
+ ์ ์ฌ์ง์ ์ฐ์ธ ์ฌ๋ฌ ๊ฐ์ง ํ๊ทธ
ํ๊ทธ | ์๋ฏธ |
{% if question_list %} | ๋ง์ฝ question_list ๊ฐ ์กด์ฌํ๋ค๋ฉด |
{% for question in question_list %} | question_list ๋ฅผ ์ํํ๋ฉฐ ํ๋์ฉ ์์๋๋ก question์ ๋์ ํ๋ค, |
{{ question.id }} | for ๋ฌธ์ ์ํด ๋์ ๋ question ๊ฐ์ฒด์ id๋ฒํธ ์ถ๋ ฅ |
{{ question.subject }} | for ๋ฌธ์ ์ํด ๋์ ๋ question ๊ฐ์ฒด ์ ๋ชฉ ์ถ๋ ฅ |
+ ์์ ๊ฒฝ์ฐ render ํจ์๋ก ์ ๋ฌํ ์ง๋ฌธ ๋ชฉ๋ก ๋ฐ์ดํฐ๋ ํ ํ๋ฆฟ์์ ์ฌ์ฉํ question_list๊ฐ ๋๋ค.
# ์ฅ๊ณ ์ ํ ํ๋ฆฟ ํ๊ทธ ์ ํ
1. ๋ถ๊ธฐ ์ ํ
- ์ฌ์ฉ๋ฒ
{% if ์กฐ๊ฑด๋ฌธ1 %}
<p>์กฐ๊ฑด๋ฌธ1์ ํด๋น๋๋ ๊ฒฝ์ฐ</p>
{% elif ์กฐ๊ฑด๋ฌธ2 %}
<p>์กฐ๊ฑด๋ฌธ2์ ํด๋น๋๋ ๊ฒฝ์ฐ</p>
{% else %}
<p>์กฐ๊ฑด๋ฌธ1, 2์ ๋ชจ๋ ํด๋น๋์ง ์๋ ๊ฒฝ์ฐ</p>
{% endif %}
+ Python if ๋ฌธ๊ณผ ์ ์ฌ
2. ๋ฐ๋ณต ์ ํ
- ์ฌ์ฉ๋ฒ
{% for item in list %}
<p>์์: {{ forloop.counter }} </p>
<p>{{ item }}</p>
{% endfor %}
+ Python for ๋ฌธ๊ณผ ์ ์ฌ
- ํฌํ๋ฆฟ for ๋ฌธ ์์์ ์ฌ์ฉ๊ฐ๋ฅํ forloop ๊ฐ์ฒด
forloop ์์ฑ | ์๋ฏธ |
forloop.counter | ๋ฃจํ ์ ์์๋๋ก 1๋ถํฐ ํ์ |
forloop.counter0 | ๋ฃจํ ์ ์์๋๋ก 0๋ถํฐ ํ์ |
forloop.first | ๋ฃจํ์ ์ฒซ๋ฒ์งธ ์์์ธ ๊ฒฝ์ฐ True |
forloop.last | ๋ฃจํ์ ๋ง์ง๋ง ์์์ธ ๊ฒฝ์ฐ True |
3. ๊ฐ์ฒด ์ถ๋ ฅ ์ ํ
- ์ฌ์ฉ๋ฒ
{ { ๊ฐ์ฒด } } --> ๊ฐ์ฒด ์์ฑ ์๋ ๊ฒฝ์ฐ
{ { ๊ฐ์ฒด, ๊ฐ์ฒด์ ์์ฑ } } --> ๊ฐ์ฒด ์์ฑ ์๋ ๊ฒฝ์ฐ
# ์ง๋ฌธ ์์ธ์ urls.py
1. ๋ก์ปฌ ์๋ฒ๋ฅผ ์ฌ์์ํ๊ณ http://localhost:8000/pybo/ํ์ด์ง๋ฅผ ์์ฒญํ๋ค.
2. ์ ์ฌ์ง์ ์ง๋ฌธ ๋ชฉ๋ก์ ํด๋ฆญํ๋ฉด ์๋์ฒ๋ผ ์ค๋ฅ๊ฐ ๋จ --> http://localhost:8000/pybo/2/ ๊ฐ์ ํ์ด์ง์ ๋ํ URL ๋งคํ์ด ์์ด์
# urls.py
- ์ง๋ฌธ ๋ชฉ๋ก ํ๋ฉด์์ ๋งํฌ๋ฅผ ๋๋ฌ ์์ฒญํ ์ง๋ฌธ ์์ธ URL
: http://localhost:8000/pybo/2/ <-- id ๊ฐ์ด 2์ธ Queston ์ ์์ธ ์กฐํํ๋ผ๋ ์๋
- ์ URL์ด ๋์ํ ์ ์๊ฒ pybo/urls.py ํ์ผ์ ์๋์ ๊ฐ์ด ์์
+ http://localhost:8000/pybo/2/ ํ์ด์ง ์์ฒญ --> ๋ฑ๋กํ ๋งคํ ๋ฃฐ์ ์ํด http://localhost:8000/pybo/<int:question_id>/ ๊ฐ ์ ์ฉ --> queston_id ์ 2 ์ ์ฅ --> views.detail ํจ์ ์คํ
+ < int :question_id> ์์ int ๋ ์ซ์๊ฐ ๋งคํ๋จ์ ์๋ฏธ
# views.py
- ์๋์ ๊ฐ์ด pybo/views.py ํ์ผ์ detail ํจ์๋ฅผ ์ถ๊ฐํ๋ค.
+ ์ถ๊ฐ๋ ๋งค๊ฐ๋ณ์ question_id ์๋ URL ๋งคํ ์ ์ ์ฅ๋ question_id ๊ฐ ์ ๋ฌ
+ http://localhost:8000/pybo/2/ํ์ด์ง ์์ฒญ ์ ๋งค๊ฐ๋ณ์ queston_id ์ 2๊ฐ ์ธํ ๋์ด detail ํจ์๊ฐ ์คํ๋จ
# question_detail.html
1. ์๋์ฒ๋ผ detail ํจ์์์ ์ธ pybo/question_detail.html ํ ํ๋ฆฟ ์์ฑ
+ ์ ์ฒด ํ์ผ๋ช ์ projects/mysite/templates/pybo/question_detail.html
+ {{ question.subject }}๊ณผ {{ question.content }}์ question์ detail ํจ์์์ ํ ํ๋ฆฟ์ context ๋ณ์๋ก ์ ๋ฌํ Question ๋ชจ๋ธ ๊ฐ์ฒด์
2. http://localhost:8000/pybo/2/ ํ์ด์ง๋ฅผ ์์ฒญํ๋ค.
# ์ค๋ฅ ํ์ด์ง์ ์๋ต ์ฝ๋
1. http://localhost:8000/pybo/30/ ํ์ด์ง๋ฅผ ์์ฒญํ๋ค.
+ DoesNotExist ์ค๋ฅ๋ Question.object.get(id=30)์ด ํธ์ถ๋์ด ๋ฐ์ํ ์ค๋ฅ์ --> ์ ๋ฌ๋ question_id๊ฐ 30์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์
+ ๋ธ๋ผ์ฐ์ ์ ์ ๋ฌ๋๋ ์ค๋ฅ์ฝ๋ = 500
+ HTTP์ ์ฃผ์ ์๋ต์ฝ๋์ ์ข ๋ฅ
์ค๋ฅ์ฝ๋ | ์ค๋ช |
200 | ์ฑ๊ณต (OK) |
500 | ์๋ฒ ์ค๋ฅ (Internal Server Error) |
404 | ์๋ฒ๊ฐ ์์ฒญํ ํ์ด์ง๋ฅผ ์ฐพ์ ์ X (Not Found) |
2. ์ผ์ ์ http://localhost:8000/pybo/30/ ์ฒ๋ผ ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๊ฒฝ์ฐ 500 ํ์ด์ง๊ฐ ์๋ 404 ํ์ด์ง๋ฅผ ์ถ๋ ฅํ๋๋ก detail ํจ์๋ฅผ ์๋์ ๊ฐ์ด ์์ ํ ๋ค์ http://localhost:8000/pybo/30/ ํ์ด์ง ์์ฒญ
+ ์ฌ์ฉํ pk๋ Question ๋ชจ๋ธ์ ๊ธฐ๋ณธํค(Primary Key)์ ํด๋นํ๋ ๊ฐ์ ์๋ฏธํจ
'โ๏ธ Python Programming > Frameworks' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
< django - 8 > (0) | 2022.08.01 |
---|---|
< django - 7 > (0) | 2022.08.01 |
< django - 5 > (0) | 2022.07.30 |
< django - 4 > (0) | 2022.07.29 |
< django - 3 > (0) | 2022.07.28 |