Tech/Django

[Django] 02. Template

aeightchill 2025. 2. 11. 23:12
728x90

 

 

 


 

๐Ÿ“Œ  Render

 

Render ํ•จ์ˆ˜

  • ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ '.html' ์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ์™„์„ฑํ•œ๋‹ค๋Š” ๋А๋‚Œ์— ๊ฐ€๊น๋‹ค.
# views.py
def index(request):
	return render(request, '.html', {})

 

 

Render ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ

request    :     http request๋ฅผ ๋ฐ›์€ ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ ๊ฒƒ
'.html'       :     ์‘๋‹ต์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ณด์—ฌ์ค„ file์„ ์ง€์ •
{}               :     request,  '.html'์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์‚ฌ์šฉํ•  ์—ฌ๋Ÿฌ ์ธ์ž๋“ค (dictionary ํ˜•ํƒœ๋กœ ์ „๋‹ฌ)

 

 

 


๐Ÿ“Œ  HTML ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• (์—ฌ๋Ÿฌ ๊ฐ€์ง€...)

 

๊ฐ ์•ฑ์˜ Directory์—์„œ ๊ด€๋ฆฌ

  • homepage  >  template (์ƒ์„ฑ)
  • template  >  index.html (์ƒ์„ฑ)

 

HTML

HTML์€ ์—ด๋ฆฐ ํƒœ๊ทธ์™€ ๋‹ซํžŒ ํƒœ๊ทธ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

<!DOCTYPE html>
<html>

	<head>
		<title> </title>
	</head>

	<body>
		<h1> </h1>
		<p> </p>
	</body>

</html>

<head>
<!-- - html file์— ๋Œ€ํ•œ ๋ฉ”ํƒ€์ ์ธ ์ •๋ณด
     - ๋ณด์ด๋Š” ๋ถ€๋ถ„์ด ์•„๋‹Œ ๊ทธ ๋’ค์—์„œ ์ด๋ค„์ง€๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ž‘์„ฑ -->
	<title> Python django example </title>
</head>

<body>
<!-- ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ -->
	<h1> Title </h1>  <!-- ์ œ๋ชฉ๊ณผ ๊ฐ™์€ ๋ถ€๋ถ„์„ ์ž‘์„ฑ -->
	<p> blah blah blah </p>  <!-- ๋ฌธ๋‹จ ํƒœ๊ทธ (๋‚ด์šฉ) -->
</body>

 

 


๐Ÿ“Œ  HTML ์ƒ์„ฑ ์ดํ›„

 

# ์ƒ์„ฑํ•œ html file์„ render ํ•จ์ˆ˜์˜ ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.
render(request, 'index.html', {})

 

 

  ๐Ÿ“‚  webproj  โ†’  settings.py

webproj > settings.py

TEMPLATES = [
    'DIRS' : ['homepage/template/index.html'] # directory๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ
               # Template๋“ค์ด ๋‹ด๊ธด ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
]

 

 

'homepage/template/index.html' ๋ผ๊ณ  ์ผ์„ ๋•Œ์˜ ๋ฌธ์ œ

  • django๋Š” ๋‚ด ์ปดํ“จํ„ฐ ์ƒ์—์„œ webproj ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์–ด๋”” ์žˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค.
  • ['homepage/template/index.html']  โ†’  [BASE_DIR + ...]

 

 

์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์“ฐ๊ธฐ๋ณด๋‹ค๋Š” os ์‚ฌ์šฉํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.

os.path.join(BASE_DIR,"homepage","template")

 

 

 


๐Ÿ“Œ  ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€ํ•˜๋Š” ์ •๋ณด๋“ค์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ

 

๊ณ ์ •๋˜์–ด ์žˆ๋Š” ๋ณ€์ˆ˜์— ๋Œ€ํ•œ

# views.py >

def index(request):
	number = 10
	return render(request, 'index.html', {"my_num" : number})

# index.html >

<body> ๋‚ด์— ์ž‘์„ฑ
<p> {{ my_num }} </p> # my_num์— ํ•ด๋‹นํ•˜๋Š” ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

์กฐ๊ฑด์ด๋‚˜ ๋ฐ˜๋ณต์˜ ๋กœ์ง ์‚ฝ์ž… & template filter

 

template filter

  • ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํŠน์ • ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ
  • ๊ฐ’์˜ ๊ธธ์ด๋“ ์ง€ ํŠน์ • ๊ฐ’๋งŒ ์›ํ•  ๋•Œ
# views.py >

def index(request):
	name = "Michael"
	return render(request, 'index.html', {"my_name" : name})


# index.html >

<p>{{ my_name | length}}</p> # length(๊ธธ์ด์ถœ๋ ฅ) ๋ผ๋Š” filter ์ ์šฉ
<p>{{ my_name | upper}}</p> # ๋ชจ๋“  ๊ฐ’์ด ๋Œ€๋ฌธ์ž๋กœ

''' document๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์›ํ•˜๋Š” filter๋ฅผ ์ฐพ์•„์„œ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค. '''

 

 

template tag

 

for tag
# index.html >

<body> ๋‚ด์— ์ž‘์„ฑ
{% tag ... %} # ์‹œ์ž‘
   ์ ์šฉํ•  ๋กœ์ง์„ ์ž‘์„ฑ
{% endtag ... %} # ์ข…๋ฃŒ

''' document๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์›ํ•˜๋Š” tag๋ฅผ ์ฐพ์•„์„œ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค. '''
# for tag
{% for a in b %}               # b๋Š” template์— ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
# views.py >

    def index(request):
        nums = [1,2,3,4,5]
        return render(request, 'index.html', {"my_list" : nums})
        
# index.html >

   {% for element in my_list %}
      <p>{{ element }}</p>
   {% endfor %}

 


if tag
# if tag
{% for element in my_list %}
       # |(template filter)๋กœ ์กฐ๊ฑด์„ ๊ฑธ ์ˆ˜ ์žˆ๋‹ค.
       # ์ง์ˆ˜๋งŒ ์ถœ๋ ฅํ•˜๊ฒŒ ํ•˜๊ธฐ
       {% if element|divisibleby:"2" %} # element๊ฐ€ ์ˆซ์ž 2์œผ๋กœ ์•ฝ๋ถ„์ด ๋˜๋ฉด element๋ฅผ ์ถœ๋ ฅ
          <p>{{ element }}</p>
       {% endif %}
{% endfor %}โ€‹

 

# if not tag
{% for element in my_list %}
      # |(template filter)๋กœ ์กฐ๊ฑด์„ ๊ฑธ ์ˆ˜ ์žˆ๋‹ค.
      # ํ™€์ˆ˜๋งŒ ์ถœ๋ ฅํ•˜๊ฒŒ ํ•˜๊ธฐ
      {% if not element|divisibleby:"2" %}
          <p>{{ element }}</p>
      {% endif %}
{% endfor %}โ€‹

 

 

 

 

728x90
๋Œ“๊ธ€์ˆ˜0