728x90
반응형
게시판에 이어서 여러 데이터를 출력하고 뿌리는 프로젝트를 완성해나가고 있다. 다 볼 필요는 없을거 같고 중요한 부분 몇가지만 추려서 개인 프로젝트에 적용도 하고 블로깅으로 기록도 남길 생각이다.
페이지 블록 나누기
일단 필요한 값을 dao에서 보내준다. 이때 필요한 정보는 totalpage, 즉 몇 페이지까지 있는지에 대한 정보가 필요하다.
def movie_list(page):
conn=getConnection()
cursor=conn.cursor()
rowSize = 12
start = (rowSize * page) - (rowSize - 1)
end = rowSize * page
sql = f"""
SELECT mno,poster,title,num
FROM (SELECT mno,poster,title,rownum as num
FROM (SELECT /*+ INDEX_ASC(daum_movie dm_mno_pk) */ mno,poster,title
FROM daum_movie))
WHERE num BETWEEN {start} AND {end}
"""
cursor.execute(sql)
movie_data = cursor.fetchall()
#print(movie_data)
cursor.close()
conn.close()
return movie_data
값을 넘겨주면 views.py에서 처리를 잘 해주어야 한다.
def home(request):
try:
page=request.GET['page']
curpage=int(page)
except Exception as e:
curpage=1
movie_data=models.movie_list(curpage)
md=[]
for row in movie_data:
data={"mno":row[0],"poster":row[1],"title":row[2]}
md.append(data)
block=5
startPage=((curpage-1)//block*block)+1
endPage=((curpage-1)//block*block)+block
totalpage=models.movie_totalpage()
totalpage=int(totalpage)
if endPage>totalpage:
endPage=totalpage
print("startPage="+str(startPage))
print("endPage="+str(endPage))
return render(request,'total/home.html',{"curpage":curpage,"totalpage":totalpage,"startPage":startPage,"endPage":endPage,"md":md,"range":range(startPage,endPage+1)})
일단 페이지 정보를 Get방식으로 받아오고, 해당하는 리스트를 전송한다. 페이지 블록은 5개 단위로 나눠준다.
html에서는 수식 계산이 안되기 때문에 range를 계산해서 보내준다. 파이썬의 경우 마지막은 range에 포함이 되지 않기 때문에 꼭 +1을 해서 보내줘야 한다.
그리고 html에서 받아와서 처리
<div class="row">
<div class="text-center">
<ul class="pagination">
{% if startPage > 1 %}
<li><a href="../total/?page={{startPage|add:-1}}"><</a></li>
{% endif %}
{% for i in range %}
{% if i == curpage %}
<li class="active"><a href="../total/?page={{i}}">{{i}}</a></li>
{% else %}
<li><a href="../total/?page={{i}}">{{i}}</a></li>
{% endif %}
{% endfor %}
{% if endPage < totalpage %}
<li><a href="../total/?page={{endPage|add:1}}">></a></li>
{% endif %}
</ul>
</div>
조건문 사용해서 +1해주거나 -1해주면서 페이지처리를 완성한다.
include 하기
일단 구조는 이렇게 되어 있고, 메뉴바가 위에 존재하고 있다. 이걸 보여주기 위해서는 include를 사용해야한다.
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">Python Example</a>
</div>
<ul class="nav navbar-nav">
<li class="active"><a href="/total/">Home</a></li>
<li><a href="/total/music/">뮤직</a></li>
<li><a href="/total/food">맛집</a></li>
<li><a href="/total/recipe">레시피</a></li>
<li><a href="/total/recipe">뉴스</a></li>
<li><a href="/total/recipe">묻고답하기</a></li>
</ul>
</div>
</nav>
일단 이게 메뉴바이고,
<body>
{% include 'total/menu.html' %}
<div style="height:30px"></div>
include자체는 이렇게 간단하게 할 수 있다. 근데 문제는 메뉴바를 include하는게 아니라 홈 화면에서 여러 화면들을 출력해야 하는데 이건 어떻게 하는건지 모른다. 여쭤봐야겠다.
728x90
반응형
'programming > Gukbi' 카테고리의 다른 글
국비 교육 106일차 - ORM 게시판 만들기,MySQL 사용 (0) | 2021.05.31 |
---|---|
국비 교육 105일차 - django project 마무리(사진 등록, 템플릿 적용) (0) | 2021.05.28 |
국비 교육 103일차 - CURD 프로그램 (게시판) 만들기 (0) | 2021.05.27 |
국비 교육 102일차 - django 프로젝트(리스트 출력, 페이지 나누기) (0) | 2021.05.25 |
국비 교육 101일차 - Django ORM 프로그램 (0) | 2021.05.25 |