파파비의 블로그

[python / 파이썬] Django Dynamic path segment & Captured Value 본문

개발/django

[python / 파이썬] Django Dynamic path segment & Captured Value

N. Dave 2021. 6. 5. 08:09
반응형

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:변수명> 이렇게 활용하면 된다.

 

 

 

반응형
Comments