1. polls/views.py 파일을 아래와 같이 작성한다.
from django.http import HttpResponse def index(request): return HttpResponse("Hello. world. You're at the poll index.")
2. polls/urls.py 파일을 생성하고 아래와 같이 작성한다.
from django.conf.urls import patterns, url from polls import views urlpatterns = patterns('', url(r'^$', views.index, name = 'index') )
3. mysite/url.py 파일을 아래와같이 수정한다.
from django.conf.urls import patterns, include, url # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r'^polls/', include('polls.urls')), )
※ 그러니까 정리하면 127.0.0.1:8000/polls/로 접속하면 polls.urls로 주소를 찾으로 들어가고, 주소 패턴이 없으면(r'^$') views.index를 실행시켜라 뭐 이런거??
※ url 패턴은 정규표현식(regular expression)을 사용한는데 자세한 내용은 http://en.wikipedia.org/wiki/Regular_expression
4. 실행해보자
5. 몇개의 view를 더 추가해 보자
polls/views.py를 아래와 같이 수정한다.
# Create your views here. from django.http import HttpResponse def index(request): return HttpResponse("Hello. world. You're at the poll index.") def detail(request, poll_id): return HttpResponse("You're looking at poll %s." % poll_id) def results(request, poll_id): return HttpResponse("You're looking at the results of polls %s." % poll_id) def vote(request, poll_id): return HttpResponse("You're voting on poll %s." % poll_id)
6. 조금더 복잡한 url 패턴을 정의해보자
polls/urls.py를 아래와 같이 수정
from django.conf.urls import patterns, url from polls import views urlpatterns = patterns('', # ex: /polls/ url(r'^$', views.index, name = 'index'), # ex: /polls/5/ url(r'^(?P\d+)/$', views.detail, name='detail'), # ex: /polls/5/results/ url(r'^(?P \d+)/results/$', views.results, name='results'), # ex: /polls/5/vote/ url(r'^(?P \d+)/vote/$', views.vote, name='vote'), )
※ 그러니까 (?P<poll_id>\d) 요 부분이 "poll_id 라는 파라미터(\d = 숫자 타입)를 입력 받는다" 라는 뜻
7. 결과를 확인해보자
http://127.0.0.1:8000/polls/5/
http://127.0.0.1:8000/polls/5/results/
http://127.0.0.1:8000/polls/5/vote/
8. DB를 읽어다가 화면에 뿌려보자
polls/view.py의 index 함수를 아래와 같이 수정한다.
- poll 테이블에 입력된값을 pub_date로 desc 정렬해서 5개만 불러온 다음에 중간중간 "," 를 삽입해서 출력하는 코드
from polls.models import Poll def index(request): # return HttpResponse("Hello. world. You're at the poll index.") latest_poll_list = Poll.objects.order_by('-pub_date')[:5] output = ', '.join(p.question for p in latest_poll_list) return HttpResponse(output)
9. 결과 화면
10. 템플릿(html)을 이용해서 출력해보자
polls/templates/polls/index.html 파일을 생성한다.
{% if latest_poll_list %}
-
{% for poll in latest_poll_list %}
- {{ poll.question }} {% endfor %}
No polls are available.
{% endif %}음... if는 {% if %} {% endif %}
for는 {% for %} {% endfor %}
변수는 {{ 변수 }}
형태인듯
그리고 /polls/{{ poll.id }}/ 경로는 결국 detail view를 의미하는거고 detail view는 urls.py 파일에 name = 'detail로 정의 되어 있다.'
따라서
이렇게 작성하는게 더 좋다.
polls/views.py 파일의 index 함수를 수정해 보자
from django.http import HttpResponse from polls.models import Poll from django.template import Context, loader def index(request): # return HttpResponse("Hello. world. You're at the poll index.") latest_poll_list = Poll.objects.order_by('-pub_date')[:5] # output = ', '.join(p.question for p in latest_poll_list) # return HttpResponse(output) template = loader.get_template('polls/index.html') context = Context({ 'latest_poll_list' : latest_poll_list }) return HttpResponse(template.render(context))
loader.get_template 로 템플릿을 가져와서 변수를 Context 에 담아서 render 해버리면 되는듯...
좀더 간결한 형태로
from django.template import Context from django.shortcuts import render def index(request): latest_poll_list = Poll.objects.order_by('-pub_date')[:5] context = Context({ 'latest_poll_list' : latest_poll_list }) return render(request, 'polls/index.html', context)
이렇게 처리 할 수도 있다.
11. 결과 확인
'Python > Python(Django)' 카테고리의 다른 글
Django tutorial part4. (Form 작성) (0) | 2013.04.19 |
---|---|
Django tutorial part3. 2/2 (화면 만들기) (0) | 2013.04.19 |
Django tutorial part2. (관리자 화면 활성화) (0) | 2013.04.18 |
Django Tutorial part1. (프로젝트 생성, Model 정의) (0) | 2013.04.18 |