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 |