게시판을 만들게 되면 페이지마다 페이지 번호를 매기게 됩니다.

사용자가 게시물 클릭하면 페이지번호를 BackEnd로 넘기고 페이지 번호를 통해 DB에 있는 게시물을 읽어와 사용자 화면에 출력하게 되는데 이때 보통 아래와 형태로 파라미터가 넘어가게됩니다.

"http://DOMAIN/?page=1" 이러한 경우는 GET 방식으로 "page" 파라미터사용하면 됩니다.

하지만 간혹 "http://DOMAIN/1/"과 같이 이러한 페이지 요청을 종종 보게 됩니다.

Django에서는 아주 간편하게 "urls.py"를 통해 파라미터인 "1"부분을 추출하여 "view.py"로 넘길 수 있습니다.

 

1. "param.html"파일 생성

[소스]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{ data }}
</body>
</html>

 

위와 같은 경로에 "param.html"을 생성해주고 "main/views.py"를 통해 넘겨받을 데이터 명을 "{{ data }}" 코드로 받아올 예정입니다.

 

2. "main/views.py" 수정

[소스]

def urlpattern(request, param):
    data = {
        'data': param,
    }
    return render(request, 'main/param.html', data)

 

파라미터를 넘겨받아 main/param.html로 전달할 함수를 "urlpattern"으로 정의합니다.

 

 

3. main/urls.py 수정

[StringType 전달]

path('<str:param>/', views.urlpattern),

[결과]

 

[IntType 전달]

path('<int:param>/', views.urlpattern),

[결과]

이 처럼 문자와 숫자 형태로 페이지 번호를 넘길 수 있습니다.

 

4. 정규표현식을 이용한 URL패턴 매칭

[main/urls.py 수정]

re_path('(?P<param>\d+)/$', views.urlpattern),

위 처럼 소스를 수정해줍니다.

"re_path"의 경우 정규표현식을 이용하여 URL이 매칭이 되면 views.py에 정의한 함수로 사용자 요청을 전송 할 수 있도록 해주는 함수이며 "?P<[파라미터 명]>" 부분은 넘겨줄 파라미터명을 정의하는 부분입니다. 정규표현식에서 "\d+"의 경우 연속된 숫자를 의미하며 '$'의 경우 끝을 의미합니다.

 

[결과]

이처럼 정규표현식을 이용하여 파라미터를 전송할 수도 있습니다.

 

+ Recent posts