URL & Template

justyoonยท2023๋…„ 4์›” 9์ผ
0

AI5 Python/Django

๋ชฉ๋ก ๋ณด๊ธฐ
25/31
post-thumbnail

๐Ÿ“‚ applications

๐Ÿ”ท admin.py
๐Ÿ”ท apps.py
๐Ÿ”ท models.py
๐Ÿ”ท tests.py
๐Ÿ”ท views.py

๐Ÿ“ my_project

๐Ÿ”ท __init__.py
๐Ÿ”ท settings.py
๐Ÿ”ท urls.py
๐Ÿ”ท wsgi.py
๐Ÿ”ท asgi.py

1. ๐Ÿ”ทurls.py - ๐Ÿ”ทviews.py - ๐ŸŸฅtemplate ์—ฐ๊ฒฐ

## my_project/urls.py
...
>>from articles import views
...
urlpatterns = [
...
  >>path('index/', views.index),
]
## articles/views.py
>>def index(request):
  >>return render(request, 'index.html')
<!-- articles/templates/index.html-->
<h1>๊ฑฐ๋ถ์ด๋ฐ˜ ํ™”์ดํŒ…!</h1>

๐Ÿ’กfrom "" import "" ๋Š” ๊ธฐ์กด์— ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ์ฃผ๋กœ ์“ฐ์˜€๋Š”๋ฐ articles๋ž€ ์ด๋ฆ„์˜ ์•ฑํด๋”๋Š” __init__.py์ด ์ž‘์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Python์ด ๋ชจ๋“ˆ๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ’กarticles๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, views๋Š” ๋ชจ๋“ˆ, .index๋Š” ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
๐Ÿ’กrequest๋Š” ๋ฐ˜๋“œ์‹œ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ •๋ฆฌ

  1. urls.py์— ์—ฐ๊ฒฐํ•  ๋ชจ๋“ˆ์„ importํ•ด๋‘๋ฉด index์ฃผ์†Œ๋กœ ์ ‘์†์‹œ views.py์— ์ •์˜ํ•œ ๋‚ด์šฉ์— ๋”ฐ๋ผ์„œviews.index๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    (views๋Š” articles๋กœ๋ถ€ํ„ฐ ๋ถˆ๋Ÿฌ์˜จ ๋ชจ๋“ˆ๋กœ ์ธ์‹)

  2. views.py์—์„œ http request๋ฅผ renderํ•˜๊ณ  response๋ฅผ returnํ•˜๊ธฐ ์œ„ํ•ด index.html ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. render ์ธ์ž์— index.html์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

  3. ํ…œํ”Œ๋ฆฟ์— index.html ๋งŒ๋“ค๊ณ  ์›น์— ๋ณด์—ฌ์ค„ ๋‚ด์šฉ์˜ ๋ฌธ๋ฒ•์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

2. ๐ŸŸฅํ…œํ”Œ๋ฆฟ ๊ธฐ๋ณธ ์ถœ๋ ฅ

## my_project/urls.py
urlpatterns = [
...
  >>path('dinner/', views.dinner),
]
## articles/views.py
>>def dinner(request):
# ๋ฉ”๋‰ด๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ์ŠคํŠธ์— ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๋‹ด๋Š” menus ๋งŒ๋“ค๊ธฐ 
    >>menus = ['์กฑ๋ฐœ', 'ํ–„๋ฒ„๊ฑฐ', '์น˜ํ‚จ', '์ดˆ๋ฐฅ']
    # munues๋ฅผ ์ธ์ž๋กœ๋ฐ›์•„ ๋žœ๋คํ•˜๊ฒŒ ๊ณ ๋ฅด๋Š” pick ๋งŒ๋“ค๊ธฐ
    >>pick = random.choice(menus)
    # ๋ฉ”๋‰ด๋ฐ์ดํ„ฐ๋ฅผ views.py -> dinner.html ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด context ์‚ฌ์šฉ
    >>context = {
        'pick': pick, # ํ‚ค pick์•ˆ์— ๋žœ๋คํ•˜๊ฒŒ ๊ณ ๋ฅธ ๋ฉ”๋‰ด ๋ณ€์ˆ˜ ์ €์žฅ
    }
    return render(request, 'dinner.html', >>context)
<!--articles/templates/dinner.html-->
<h1>์˜ค๋Š˜ ์ €๋…์€ {{pick}} ์ž…๋‹ˆ๋‹ค.</h1>

- ๋žœ๋คํ•˜๊ฒŒ ๊ณ ๋ฅธ ๋ฉ”๋‰ด๋“ค์ด ๋‚˜์˜ค๋Š” ๋ชจ์Šต

3. ๐Ÿ”—๋ณ€์ˆ˜ํ˜•url

์ฃผ์†Œ์ž์ฒด๋ฅผ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ด์„œ ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณ€์ˆ˜ํ˜• url์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ๋กœ ์œ ์ € ๊ฐœ์ธ ํŽ˜์ด์ง€์— ์œ ์ €๋ช…์ด ์ฃผ์†Œ๋กœ ๋“ค์–ด๊ฐ„ ๊ฒฝ์šฐ๊ฐ€ ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค.

## my_project/urls.py
urlpatterns = [
...
  >>path('dinner/<str:name>/', views.dinner),
]
## articles/views.py
def dinner(request, >>name):
    ...
    context = {
        'pick': pick,
      >>'name': name,
    }
    ...
<!--articles/templates/dinner.html-->
<h1>์˜ค๋Š˜ {{name}}๋‹˜์˜ ์ €๋…์€ {{pick}} ์ž…๋‹ˆ๋‹ค.</h1>

์ด๋Ÿฐ์‹์œผ๋กœ ์žฅ๊ณ  ํ…œํ”Œ๋ฆฟ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ์ฃผ์†Œ๊ฐ’์ด๋‚˜ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ HTML๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

4. Django templates language(DTL)

์žฅ๊ณ ์˜ ํ…œํ”Œ๋ฆฟ์ด ์–ด๋–ค๊ฑด์ง€ ํ…œํ”Œ๋ฆฟ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํƒœ๊ทธ๊ฐ€ ์–ด๋–ค๊ฑด์ง€ ์žฅ๊ณ : ํ…œํ”Œ๋ฆฟ ๊ณต์‹ ๋ฌธ์„œ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์—๋Š” ์“ฐ์ง€ ์•Š๊ฒ ์ง€๋งŒ ์ฒ˜์Œ์— ์žฅ๊ณ ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ…œํ”Œ๋ฆฟ์„ ์–ด๋Š์ •๋„ ์ตํ˜€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์žฅ๊ณ : ๋‚ด์žฅ ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ์™€ ํ•„ํ„ฐ๋“ค์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ผ๋งŒํ•œ for์™€ if๋ฅผ ์—ฐ์Šตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. DTL for

for ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด ์ €๋… ํ‚ค๊ฐ’๊ณผ ๋ฉ”๋‰ด๋ฆฌ์ŠคํŠธ์—์„œ ๋ฉ”๋‰ด์˜ ํ‚ค๊ฐ’์„ ์—ฐ๊ฒฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

## articles/views.py
def dinner(request, name):
    ...
    context = {
        'pick': pick,
        'name': name,
      >>'menus': menus
    }
    return render(request, 'dinner.html', context)
<h1>์˜ค๋Š˜ {{name}}๋‹˜์˜ ์ €๋…์€ {{pick}} ์ž…๋‹ˆ๋‹ค.</h1>
<h1>๋ฉ”๋‰ด ๋ฆฌ์ŠคํŠธ</h1>
<ul> <!-- โ— ํ‘œ์‹œ -->
    {% for menu in menus %}
    <li>{{ menu }}</li>
    {% endfor %}
</ul>
def dinner(request, name):
  >>menus = [{"name":'์กฑ๋ฐœ',"price":30000}, {"name":'ํ–„๋ฒ„๊ฑฐ',"price":5000}, {"name":'์น˜ํ‚จ',"price":20000}, {"name":'์ดˆ๋ฐฅ',"price":15000}]
...

- ์ €๋… ํ‚ค๊ฐ’ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Œ
- ๋ฉ”๋‰ด ๋ฆฌ์ŠคํŠธ์˜ name ํ‚ค๊ฐ’ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Œ
<h1>์˜ค๋Š˜ {{name}}๋‹˜์˜ ์ €๋…์€ {{pick.name}} ์ž…๋‹ˆ๋‹ค.</h1>
<h1>๋ฉ”๋‰ด ๋ฆฌ์ŠคํŠธ</h1>
<ul>
    {% for menu in menus %}
    <li>{{ menu.name }} {{ menu.price }}์›</li>
    {% endfor %}
</ul>

- ์ €๋… ํ‚ค๊ฐ’ ์—ฐ๊ฒฐ
- ๋ฉ”๋‰ด ๋ฆฌ์ŠคํŠธ์˜ name ํ‚ค๊ฐ’, price ํ‚ค๊ฐ’ ์—ฐ๊ฒฐ

2. DTL if

if ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•ด ํŠน์ • ๊ฐ€๊ฒฉ๋Œ€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ ๋ฏผํ•˜๋Š” ๋ฐ˜์‘์„ ์ถœ๋ ฅํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

<h1>...</h1>
<ul>...</ul>

{% if pick.price > 20000 %}
<p>๋น„์‹ธ๋‹ค</p>
{% elif pick.price > 10000 %}
<p>๊ทธ๋Ÿญ์ €๋Ÿญ</p>
{% else %}
<p>๋„ˆ๋ฌด์ข‹์•„!</p>
{% endif %}

- ์กฐ๊ฑด์— ์„ค์ •ํ•œ 20000์›์ดˆ๊ณผ, 10000์›์ดˆ๊ณผ ๋ฉ”๋‰ด๊ฐ€ ์•„๋‹Œ ํ–„๋ฒ„๊ฑฐ๊ฐ€ pick๋˜์—ˆ๋‹ค
- else์กฐ๊ฑด <p>๋„ˆ๋ฌด์ข‹์•„!</p> ์ถœ๋ ฅ
profile
with gratitude, optimism is sustainable

0๊ฐœ์˜ ๋Œ“๊ธ€