파파비의 블로그
[python / 파이썬] Django Dynamic path segment & Captured Value 본문
Url 값을 설정해서, 이 것에 따라 이런 view를 실행하라~ 라고 한다면, 매번 특정 url 값에 대한 설정이 필요하다.
그러면 엄청나게 많은 설정이 필요할 것이다.
그리고 블로그처럼, post가 생겨날때에 대해, 즉 미래에 대한 url 값 대응이 불가능하다.
그래서 결국 dynamic한 url -> view 연결이 필요하다.
1) url pattern 에 dynamic하게 설정하기
> 원래 url.py > path pattern 속에는 원하는 키워드 url을 입력했다. 그러나 이것을 dynamic하게 해보자
> 그러기 위해선 <> 를 쓴다. 그리고 그 안에 원하는 변수명을 넣어준다.
2) view.monthy_challenge 뷰 만들기
> monthy_challenge 뷰에서 중요한 것은 dynamic한 month 라는 값을 가져와서 읽어줘야 한다는 것이다.
> 그러기 위해선 함수 생성시 파라미터에 동일한 이름의 파라미터를 만들어주어야 한다. (여기서는 month)
> 우리는 여러개의 다이나믹 변수들을 만들 수 있기 때문에, 장고는 이름을 일치시키게 하고 있다.
뷰는 이런식으로 설정해두었다.
> 파라미터에 month가 request 뒤로 추가 되었다.
그리고 그 값에 따라 다양한 return들을 할 수 있다.
> HttpResponseNotFound는 404를 보낼 수 있는 객체다.
추가
url pattern에서 url의 type에 따라 다른 view가 적용되게 할 수 있다.
> url에 입력하는 것은 문자도 되지만, 숫자도 될 수 있다.
> <>안에 type을 특정하게 되면, (ex, <int:month>) url에 해당 타입으로 변환 가능하다면 적용되고, 변환이 안되면 적용이 안된다.
> 따라서 만약 url이 january 라면, int로 변환이 안되기 때문에 위 예시에서는 넘어가지게 된다.
> 이렇게 해서 type에 따라 다른 view가 적용되게끔하는 것이 가능하다.
> type은 대표적으로 2가지, int, str이 있고, 그 외에는 (https://docs.djangoproject.com/en/3.1/topics/http/urls/#path-converters) 참고
직접 코드를 살펴보자
1) 먼저 뷰를 추가했다.
해당 뷰는 url이 숫자일때만 적용되게 하려고 하고, output은 그대로 숫자를 내도록한다.
2) 해당 뷰를 숫자일때만 적용되도록 고친다.
이렇게 되면, 먼저 int:month 부터 체크가 되고, 만약 url 값이 string이라면 적용되지 않고 그 밑에 path, monthy_challenge view 가 적용된다.
url이 숫자라면 바로 ~by_number view가 적용되도록 해두었다
추가))
int, str 말고도 slug 라는 것이 있다.
slug는 my-first-post 처럼 글자와 -로 이루어진 url 부분을 일컫는다.
예를들어 post/my-first-post 에서 my-first-post를 slug라고 부르는데,
my-first-post 대신 숫자로 나타낼수도 있는데, slug로 표현하면 사용자들이나 검색엔진에 더 최적화되어 좋다.
django에서는 이런 slug들이 자주 사용되다보니 type로 만들어두었고, slug형태의 url일 때만 적용되도록 하는 키워드를 만들어 두었다.
<slug:변수명> 이렇게 활용하면 된다.
'개발 > django' 카테고리의 다른 글
[python / 파이썬] Django Templates Filters (0) | 2021.06.06 |
---|---|
[python / 파이썬] Django HttpResponseRedirect (Redirecting) (0) | 2021.06.05 |
[python / 파이썬] Django App 개념 이해하기 (0) | 2021.06.04 |
[python / 파이썬] Development Server 시작하기 (0) | 2021.06.04 |
[python / 파이썬] Django 프로젝트 만드는 방법 (0) | 2021.06.04 |