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

< django - 14 >

by A Lim Han 2022. 8. 5.

14. ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ” + include ํƒœ๊ทธ + ํŽ˜์ด์ง• + ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ + Paginator ํด๋ž˜์Šค + ํŽ˜์ด์ง€ ๋ฆฌ์ŠคํŠธ

 

 

# ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”

1. projects\mysite\templates\base.html ํŒŒ์ผ์˜ base.html ํ…œํ”Œ๋ฆฟ์— ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ” ์ถ”๊ฐ€

+ Line 18  -->  ํ•ญ์ƒ pybo:index ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ด ์ฃผ๋Š” 'Pybo' ๋กœ๊ณ ๋ฅผ ๊ฐ€์žฅ ์™ผ์ชฝ์— ๋ฐฐ์น˜

+ Line 30  -->  ์˜ค๋ฅธ์ชฝ์—๋Š” '๋กœ๊ทธ์ธ' ๋งํฌ๋ฅผ ์ถ”๊ฐ€

 

 

 

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

์™ผ์ชฝ ์ƒ๋‹จ์— ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”๊ฐ€ ์ƒ๊น€

+ ์™ผ์ชฝ ์ƒ๋‹จ์˜ pybo ๊ธ€์ž๋ฅผ ๋ˆ„๋ฅด๋ฉด ์–ธ์ œ๋“  ๋‹ค์‹œ ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Œ.

 

 

 

3. Ctrl + ๋งˆ์šฐ์Šค ์Šคํฌ๋กค์„ ํ†ตํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์šฐ์ธก ์ƒ๋‹จ์— ํ–„๋ฒ„๊ฑฐ ๋ฉ”๋‰ด ๋ฒ„ํŠผ์ด ์ƒ๊ธฐ๊ณ  ๋กœ๊ทธ์ธ ๋งํฌ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

์›๋ž˜๋Š” ํ–„๋ฒ„๊ฑฐ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋กœ๊ทธ์ธ ๋งํฌ๊ฐ€ ๋ณด์—ฌ์•ผ ํ•˜์ง€๋งŒ ์•„์ง ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ(bootstrap.min.js)์ด base.html ํŒŒ์ผ์— ํฌํ•จ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด๋Ÿฐ ๋ฐ˜์‘์ด X

+ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์˜ ๋ฐ˜์‘ํ˜• ์›น ๊ธฐ๋Šฅ : ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์€ ๋ธŒ๋ผ์šฐ์ €์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง€๋ฉด ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”์— ์žˆ๋Š” ๋งํฌ๋“ค์„ ์ž‘์€ ํ–„๋ฒ„๊ฑฐ ๋ฉ”๋‰ด ๋ฒ„ํŠผ์œผ๋กœ ์ˆจ๊น€

 

 

 

4. ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ projects\mysite\static\bootstrap.min.js์— ๋ถ™์—ฌ ๋„ฃ๊ธฐ --> projects\mysite\templates\base.html ํŒŒ์ผ์— Line 41, 42 ๋‚ด์šฉ ์ถ”๊ฐ€

 

 

 

5. ๋‹ค์‹œ http://localhost:8000/pybo/ ํŽ˜์ด์ง€ ํ˜ธ์ถœ --> ํ–„๋ฒ„๊ฑฐ ๋ฉ”๋‰ด ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์•„๋ž˜์ฒ˜๋Ÿผ ๋กœ๊ทธ์ธ ๋งํฌ๊ฐ€ ํ‘œ์‹œ๋จ

 

 

 

 

# include ํƒœ๊ทธ

: ํ…œํ”Œ๋ฆฟ์˜ ํŠน์ • ์œ„์น˜์— ๋‹ค๋ฅธ ํ…œํ”Œ๋ฆฟ์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ํƒœ๊ทธ๋กœ, ํ…œํ”Œ๋ฆฟ์—์„œ ํŠน์ • ์˜์—ญ์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋  ๊ฒฝ์šฐ ์ค‘๋ณต์„ ์—†์• ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•จ

 

1. projects\mysite\templates\navbar.html ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  base.html์— ํฌํ•จ์‹œํ‚ฌ navbar.html ํ…œํ”Œ๋ฆฟ์„ ์ž‘์„ฑํ•œ๋‹ค.

 

 

 

2. projects\mysite\templates\base.html ํŒŒ์ผ์„ ์•„๋ž˜์ฒ˜๋Ÿผ ์ˆ˜์ •ํ•œ๋‹ค.

Line 15, 16 ์ˆ˜์ •๋จ

+ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”์˜ HTML ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  navbar.html ํ…œํ”Œ๋ฆฟ์„ include ํƒœ๊ทธ๋กœ ํฌํ•จ์‹œํ‚ด

 

 

 

 

# ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ

1. python manage.py shell ์„ ์ž…๋ ฅํ•˜์—ฌ ์žฅ๊ณ ์…ธ ์‹คํ–‰

 

 

 

2. ์งˆ๋ฌธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ชจ๋“ˆ์„ ์ž„ํฌํŠธ

 

 

 

3. 300๊ฐœ์˜ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ -->  ์žฅ๊ณ  ์…ธ ์ข…๋ฃŒ

๋ฐ˜๋“œ์‹œ for i in range(300): ๋‹ค์Œ์ค„์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „ ๊ณต๋ฐฑ์„ 4์นธ ๋‘์–ด์•ผ ํ•œ๋‹ค.

 

 

 

2. ๋กœ์ปฌ ์„œ๋ฒ„ ์‹คํ–‰ ํ›„ http://localhost:8000/pybo/ ํŽ˜์ด์ง€ ํ˜ธ์ถœํ•˜์—ฌ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ ์กฐํšŒ

300๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ ํŽ˜์ด์ง€์— ๋ชจ๋‘ ๋ณด์—ฌ์ ธ์„œ ๋ถˆํŽธํ•จ

 

 

 

 

# Paginator

: ์žฅ๊ณ ์—์„œ ํŽ˜์ด์ง•์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค

 

- projects\mysite\pybo\views.py ํŒŒ์ผ์˜ index ํ•จ์ˆ˜์— ํŽ˜์ด์ง• ๊ธฐ๋Šฅ ์ ์šฉ

+ << Line 9 >>  

: page = request.GET.get('page', '1')  -->  http://localhost:8000/pybo/?page=1 ์ฒ˜๋Ÿผ GET ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœ๋œ URL์—์„œ page๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉ

 

: http://localhost:8000/pybo/ ์ฒ˜๋Ÿผ page๊ฐ’ ์—†์ด ํ˜ธ์ถœ๋œ ๊ฒฝ์šฐ  -->  ๋””ํดํŠธ๋กœ 1์ด๋ผ๋Š” ๊ฐ’์„ ์„ค์ •

 

 

+ << Line 11 >>

: ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ question_list  -->  ๊ฒŒ์‹œ๋ฌผ ์ „์ฒด๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ฐ์ดํ„ฐ

 

: ๋‘๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ 10  -->  ํŽ˜์ด์ง€๋‹น ๋ณด์—ฌ์ค„ ๊ฒŒ์‹œ๋ฌผ์˜ ๊ฐœ์ˆ˜

 

 

+ << Line 12 >>

: paginator๋ฅผ ์ด์šฉํ•˜์—ฌ ์š”์ฒญ๋œ ํŽ˜์ด์ง€(page)์— ํ•ด๋‹น๋˜๋Š” ํŽ˜์ด์ง• ๊ฐ์ฒด(page_obj)๋ฅผ ์ƒ์„ฑ  -->  ์žฅ๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ์กฐํšŒํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ํŽ˜์ด์ง€์˜ ๋ฐ์ดํ„ฐ๋งŒ ์กฐํšŒํ•˜๋„๋ก ์ฟผ๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋จ

 

: ํŽ˜์ด์ง• ๊ฐ์ฒด page_obj์˜ ์†์„ฑ

ํ•ญ๋ชฉ ์„ค๋ช…
paginator.count ์ „์ฒด ๊ฒŒ์‹œ๋ฌผ ์ˆ˜
paginator.per_page ํŽ˜์ด์ง€๋‹น ๋ณด์—ฌ์ค„ ๊ฒŒ์‹œ๋ฌผ ์ˆ˜
paginator.page_range ํŽ˜์ด์ง€ ๋ฒ”์œ„
number ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ๋ฒˆํ˜ธ
previous_page_number ์ด์ „ ํŽ˜์ด์ง€์˜ ๋ฒˆํ˜ธ
next_page_number ๋‹ค์Œ ํŽ˜์ด์ง€์˜ ๋ฒˆํ˜ธ
has_previous ์ด์ „ ํŽ˜์ด์ง€์˜ ์กด์žฌ ์œ ๋ฌด
has_next ๋‹ค์Œ ํŽ˜์ด์ง€์˜ ์กด์žฌ ์œ ๋ฌด
start_index ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค
end_index ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ๋ ์ธ๋ฑ์Šค

 

 

 

 

# ํ…œํ”Œ๋ฆฟ์— ํŽ˜์ด์ง• ์ ์šฉ

1. projects\mysite\templates\pybo\question_list.html ํŒŒ์ผ์˜ </table>ํƒœ๊ทธ ๋ฐ‘์— ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์•„๋ž˜์ฒ˜๋Ÿผ ๋˜๊ฒŒ ํ•˜๊ธฐ

+ ์ด์ „/๋‹ค์Œ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ  -->  ์ด์ „/๋‹ค์Œ ๋งํฌ ํ™œ์„ฑํ™”

+ ์ด์ „/๋‹ค์Œ ํŽ˜์ด์ง€๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ  -->  ์ด์ „/๋‹ค์Œ ๋งํฌ ๋น„ํ™œ์„ฑํ™”

 

+ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์˜ pagination ์ปดํฌ๋„ŒํŠธ  -->  ํŽ˜์ด์ง€ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด๊ธฐ ํŽธํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

ex. pagination (Line 31), page-item(Line 34), page-link(Line 61) ๋“ฑ์ด ๋ถ€ํŠธ์ŠคํŠธ๋žฉ pagination ์ปดํฌ๋„ŒํŠธ์˜ ํด๋ž˜์Šค์ž„

 

+ << Line 33 >>

: ์ด์ „ ํŽ˜์ด์ง€๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ์ฒดํฌ

 

+ << Line 35 >>

: ์ด์ „ ํŽ˜์ด์ง€์˜ ๋ฒˆํ˜ธ

 

+ << Line 55 >>

: ๋‹ค์Œ ํŽ˜์ด์ง€๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ์ฒดํฌ

 

+ << Line 57 >>

: ๋‹ค์Œ ํŽ˜์ด์ง€์˜ ๋ฒˆํ˜ธ

 

+ << Line 43 >>

: ํŽ˜์ด์ง€ ๋ฆฌ์ŠคํŠธ ๋ฃจํ”„  -->  ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋งํฌ ์ƒ์„ฑ

 

+ << Line 44, 45 >>

: ํ˜„์žฌ ํŽ˜์ด์ง€์™€ ๊ฐ™์€์ง€ ์ฒดํฌ + ํ˜„์žฌ ํŽ˜์ด์ง€์™€ ๊ฐ™์„ ๊ฒฝ์šฐ  -->  active ํด๋ž˜์Šค๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ฐ•์กฐ

 

 

 

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

์„ฑ๊ณต์ ์œผ๋กœ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๊ฐ€ ๋จ

+ ๋ฌธ์ œ์ 

: ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋˜๊ธด ํ–ˆ์ง€๋งŒ ์ด๋™ ๊ฐ€๋Šฅํ•œ ํŽ˜์ด์ง€๊ฐ€ ๋ชจ๋‘ ํ‘œ์‹œ๋˜์–ด ๋ณด๊ธฐ ๋ถˆํŽธํ•จ.....

 

 

 

3. 2๋ฒˆ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด projects\mysite\templates\pybo\question_list.html ํŒŒ์ผ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •

+ Line 44, 54์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํŽ˜์ด์ง€ ํ‘œ์‹œ ์ œํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•จ  -->  ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ขŒ์šฐ๋กœ 5๊ฐœ์”ฉ๋งŒ ๋ณด์ด๊ฒŒ ์ œํ•œ

 

+ << Line 44 >>

: |add:-5, |add:5 ๋Š” ํ…œํ”Œ๋ฆฟ ํ•„ํ„ฐ๋กœ, ์ „์ž๋Š” 5๋งŒํผ ๋นผ๊ณ  ํ›„์ž๋Š” 5๋งŒํผ ๋”ํ•˜๋ผ๋Š” ์˜๋ฏธ  -->  ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ์˜๋ฏธํ•˜๋Š” question_list.number๋ณด๋‹ค 5๋งŒํผ ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ๊ฐ’๋งŒ ํ‘œ์‹œํ•˜๋„๋ก ์ œํ•œํ•จ

 

 

 

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

์ขŒ์šฐ๋กœ 5๊ฐœ์”ฉ๋งŒ ๋ณด์ด๋Š” ๊ฒƒ์„ ํ™•์ธ

 

 

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

< django - 16 >  (0) 2022.08.06
< django - 15 >  (0) 2022.08.06
< django - 13 >  (0) 2022.08.05
< django - 12 >  (0) 2022.08.05
< django - 11 >  (0) 2022.08.04