Programming/Web

[Django] 04. 어플리케이션 View 만들기

쌍쌍바나나 2017. 12. 17. 23:13
반응형

첫번째 장고 앱 작성하기, Part3

  • view를 추가
    • 질문 "색인" 페이지 - 최근의 질문들을 표시
    • 질문 "세부" 페이지 - 질문 내용과, 투표할 수 있는 서식을 표시
    • 질문 "결과" 페이지 - 특정 질문에 대한 결과
    • 투표 기능 -- 특정 질문에 대해 특정 선택을 할 수 잇는 투표 기능

View 작성하기

  • view 코드 작성
  • polls.urls에 path를 추가

View 동작시키기

View에서는 요청된 페이지의 내용이 담긴 HttpResponse를 하거나,
HTTP404와 같은 예외를 발생시키게 한다.

view에서는 데이터베이스의 레코드를 읽거나, 레코드를 읽은 데이터를 처리해서 반환을 할 수 있습니다.

위처럼 코딩하면, view에서 페이지 디자인이 하드코딩 되어 있기 때문에,
모두 view에 있는 코드를 변경해야 합니다.

polls 디렉토리에 templates라는 디렉토리를 생성하면 django에서는 템플릿을 알아서 찾아서 결과를 준다.
project의 templates 설정에는 django가 어떻게 template을 불러오고 랜더링 할것인지 서술한다.
templates/polls/index.html을 생성하면 polls/index.html로 참조가 가능

template을 이용하여 polls/views.py에서 index view를 업데이트 해보자

  • render() 사용하기

template에 context를 채워넣어 표현한 결과를 표현할 수 있도록 shortcuts을 제공합니다.

예외 처리 하기

detail view에서 질문이 없을 경우에 404예외를 발생시켜보면 아래와 같다. Http404대신 getobjector_404()의 shortcut을 사용 가능하다

getobjector404() 함수 처럼 동작하는 getlistor404() 함수가 있습니다. get() 대신 filter() 를 쓴다는 것이 다릅니다. 리스트가 비어있을 경우, Http404 예외를 발생시킵니다.

Template에서 하드코딩된 URL 제거

html <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li> <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>

polls.urls 모듈에 서술된 URL의 정의를 탐색하는 식으로 동작한다.
그렇기 때문에 URL을 만약 polls/specifics/12로 변경하고 싶으면 template에서 변경이 아닌 polls/urls.py에서 변경해야 한다

```

the 'name' value as called by the {% url %} template tag

path('/', views.detail, name='detail'), path('specifics//', views.detail, name='detail'), ```

URL의 namespace 나누기

만약 프로젝트가 많아지면 polls라는 app이외에도 많은 앱이 올텐데, URL을 app별로 구분하기 위해서는
URL conf에 namespace를 추가하면 가능하다. polls/urls.py 파일에 app_name을 추가

이제 polls/index.html template의 기존 내용을 아래와 같이 변경하면 된다.

<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li> <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

[참고]

  • https://docs.djangoproject.com/ko/2.0/intro/tutorial03/A
반응형