๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ’๏ธ Python Programming/Frameworks

< django - 15 >

by A Lim Han 2022. 8. 6.

15. ํ…œํ”Œ๋ฆฟ ํ•„ํ„ฐ ์ž‘์„ฑ ๋ฐ ์‚ฌ์šฉ + ๊ฒŒ์‹œ๋ฌผ ๋ฒˆํ˜ธ์™€ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ + ๋‹ต๋ณ€ ๊ฐœ์ˆ˜ ํ‘œ์‹œ

 

 

 

# ํ…œํ”Œ๋ฆฟ ํ•„ํ„ฐ

: ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ์—์„œ | ๋ฌธ์ž ๋’ค์— ์‚ฌ์šฉํ•˜๋Š” ํ•„ํ„ฐ

ex. {{ form.subject.value|default_if_none:'' }}

 

 

 

 

# ๊ฒŒ์‹œ๋ฌผ ๋ฒˆํ˜ธ ์˜ค๋ฅ˜

: http://localhost:8000/pybo/ ๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๊ฒŒ์‹œ๋ฌผ์˜ ๋ฒˆํ˜ธ๊ฐ€ ํ•ญ์ƒ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ. (ํŽ˜์ด์ง€๋Š” 3์ธ๋ฐ ๊ฒŒ์‹œ๋ฌผ์€ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค......)

 

 

 

 

# ๊ฒŒ์‹œ๋ฌผ ๋ฒˆํ˜ธ

: ๋งŒ์•ฝ ๊ฒŒ์‹œ๋ฌผ ์ „์ฒด ๊ฑด์ˆ˜๊ฐ€ 12๊ฐœ๋ผ๋ฉด, ์ฒซ๋ฒˆ์งธ ํŽ˜์ด์ง€๋Š” ๋ฒˆํ˜ธ๊ฐ€ 12~3๊นŒ์ง€ ์—ญ์ˆœ์œผ๋กœ ๋ณด์—ฌ์ง€๊ณ  ๋‘๋ฒˆ์งธ ํŽ˜์ด์ง€์—๋Š” 2~1๊นŒ์ง€ ๋ณด์—ฌ์ ธ์•ผ ํ•จ  -->  ๋ฒˆํ˜ธ = ์ „์ฒด๊ฑด์ˆ˜ - ์‹œ์ž‘์ธ๋ฑ์Šค - ํ˜„์žฌ์ธ๋ฑ์Šค + 1

ex. ์ „์ฒด ๊ฒŒ์‹œ๋ฌผ ๊ฐœ์ˆ˜๊ฐ€ 12, ํŽ˜์ด์ง€๋‹น 10๊ฑด์”ฉ ๊ฒŒ์‹œ๋ฌผ์„ ๋ณด์—ฌ ์ค€๋‹ค๊ณ  ๊ฐ€์ •  -->  1ํŽ˜์ด์ง€์˜ ๋ฒˆํ˜ธ๋Š” 12 - 1 - (0~9 ๋ฐ˜๋ณต) + 1 ์ด ๋˜์–ด 12~3๊นŒ์ง€ ํ‘œ์‹œ๋˜๊ณ , 2ํŽ˜์ด์ง€์˜ ๊ฒฝ์šฐ์—๋Š” 12 - 11 - (0~1 ๋ฐ˜๋ณต) + 1 ์ด ๋˜์–ด 2~1์ด ํ‘œ์‹œ๋จ

 

- ์‹œ์ž‘ ์ธ๋ฑ์Šค : ํŽ˜์ด์ง€๋‹น ์‹œ์ž‘๋˜๋Š” ๊ฒŒ์‹œ๋ฌผ์˜ ์‹œ์ž‘ ๋ฒˆํ˜ธ

ex. ํŽ˜์ด์ง€๋‹น ๊ฒŒ์‹œ๋ฌผ์„ 10๊ฑด์”ฉ ๋ณด์—ฌ์ค€๋‹ค๋ฉด, 1ํŽ˜์ด์ง€์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค๋Š” 1์ด๊ณ  2ํŽ˜์ด์ง€์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค๋Š” 11์ž„

 

- ํ˜„์žฌ ์ธ๋ฑ์Šค : ํŽ˜์ด์ง€์— ๋ณด์—ฌ์ง€๋Š” ๊ฒŒ์‹œ๋ฌผ ๊ฐœ์ˆ˜๋งŒํผ 0๋ถ€ํ„ฐ 1์”ฉ ์ฆ๊ฐ€๋˜๋Š” ๋ฒˆํ˜ธ

 

- ํ…œํ”Œ๋ฆฟ์—์„œ ๋ฒˆํ˜ธ = ์ „์ฒด๊ฑด์ˆ˜ - ์‹œ์ž‘์ธ๋ฑ์Šค - ํ˜„์žฌ์ธ๋ฑ์Šค + 1 ๊ณต์‹์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋นผ๊ธฐ ๊ธฐ๋Šฅ์ด ํ•„์š”  -->  ์žฅ๊ณ ์—๋Š” ๋นผ๊ธฐ ๊ธฐ๋Šฅ์ด X  -->  ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•จ

 

+ ์งˆ๋ฌธ!

Q. |add:-3์™€ ๊ฐ™์ด ์ˆซ์ž๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•œ๋‹ค๋ฉด ๋”ํ•˜๊ธฐ ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฐ’์„ ๋บ€ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์ง€ ์•Š๋‚˜์š”?

A. add ํ•„ํ„ฐ๋Š” ์ธ์ˆ˜๋กœ ์ˆซ์ž๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณ€์ˆ˜๋Š” ์ ์šฉ์ด ๋ถˆ๊ฐ€ํ•˜๊ธฐ์— ์œ„ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ X

 

 

 

 

# ํ…œํ”Œ๋ฆฟ ํ•„ํ„ฐ ์ž‘์„ฑํ•˜๊ธฐ

1. ํ…œํ”Œ๋ฆฟ ํ•„ํ„ฐ ํŒŒ์ผ์„ ์ €์žฅํ•  templatetags ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

 

 

2. templatetags ๋””๋ ‰ํ„ฐ๋ฆฌ์— pybo_filter.py ํŒŒ์ผ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑ

ํŒŒ์ผ๋ช…์€&nbsp;projects\mysite\pybo\templatetags\pybo_filter.py

+ << Line 6 >>

: sub ํ•จ์ˆ˜์— @register.filter ์• ๋„ˆํ…Œ์ด์…˜์„ ์ ์šฉํ•˜๋ฉด ํ…œํ”Œ๋ฆฟ์—์„œ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ•„ํ„ฐ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ O

 

+ sub ํ•จ์ˆ˜ : ๊ธฐ์กด ๊ฐ’ value์—์„œ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๊ฐ’ arg๋ฅผ ๋นผ์„œ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜

 

 

 

 

# ํ…œํ”Œ๋ฆฟ ํ•„ํ„ฐ ์‚ฌ์šฉ + ๊ฒŒ์‹œ๋ฌผ ๋ฒˆํ˜ธ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

1. projects\mysite\templates\pybo\question_list.html ํŒŒ์ผ์˜ ์งˆ๋ฌธ ๋ชฉ๋ก ํ…œํ”Œ๋ฆฟ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ

Line 17 ~ 20 ์ถ”๊ฐ€ + Line 2 ์ถ”๊ฐ€

+ ๋ฒˆํ˜ธ = ์ „์ฒด๊ฑด์ˆ˜ - ์‹œ์ž‘์ธ๋ฑ์Šค - ํ˜„์žฌ์ธ๋ฑ์Šค + 1 ๊ณต์‹์ด ์ ์šฉ๋จ

 

+ << Line 19 >>

: ๊ณต์‹ ๋Œ€์‘ ์ฝ”๋“œ

๊ณต์‹ ์ฝ”๋“œ
์ „์ฒด ๊ฑด์ˆ˜ question_list.paginator.count
์‹œ์ž‘ ์ธํ…์Šค question_list.start_index
ํ˜„์žฌ ์ธ๋ฑ์Šค forloop.counter0

 

 

 

2. ๋‹ค์‹œ http://localhost:8000/pybo/ ํŽ˜์ด์ง€ ํ˜ธ์ถœ

๊ฒŒ์‹œ๋ฌผ ๋ฒˆํ˜ธ ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋จ

 

 

 

 

# ๋‹ต๋ณ€ ๊ฐœ์ˆ˜ ํ‘œ์‹œ

1. projects\mysite\templates\pybo\question_list.html ํŒŒ์ผ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •

Line 23 ~ 25 ์ถ”๊ฐ€

+ << Line 23 >>

: {% if question.answer_set.count > 0 %} -->  ๋‹ต๋ณ€์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฒ€์‚ฌ

 

+ << Line 24 >>

: {{ question.answer_set.count }}  -->  ๋‹ต๋ณ€ ๊ฐœ์ˆ˜ ํ‘œ์‹œ

 

 

 

2. http://localhost:8000/pybo/ ํŽ˜์ด์ง€๋ฅผ ํ˜ธ์ถœ

๋‹ต๋ณ€์ด ๋‹ฌ๋ฆฐ ์งˆ๋ฌธ์€ ์ œ๋ชฉ ์˜ค๋ฅธ์ชฝ์— ์ˆซ์ž๋กœ ํ‘œ์‹œ๋จ

 

 

'โœ’๏ธ Python Programming > Frameworks' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

< django - 17 >  (0) 2022.08.07
< django - 16 >  (0) 2022.08.06
< django - 14 >  (0) 2022.08.05
< django - 13 >  (0) 2022.08.05
< django - 12 >  (0) 2022.08.05