본문 바로가기
개발

[Django] lotto - MTV 연동하기

by 마스터누누 2017. 6. 28.
728x90
반응형

lotto - MTV 연동하기




1
2
3
4
5
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.index, name='index'),
    url(r'^lotto/$', views.index, name='lotto'),
]
cs


뷰와 템플릿만 연결 했었는데, MTV를 모두 연동해보도록하자

이를 위해서 먼저 url 파일 부터 위와 같이 수정해준다.

이제부터 8000번 포트로 접근해도 로또 앱 페이지가 나온다.





1
2
3
4
from lotto.models import GuessNumbers
def index(request):
    lottos = GuessNumbers.objects.all()
    return render(request, "lotto/default.html", {"lottos": lottos})
cs


다음으로 뷰를 수정해야하는데, 현재는 index 함수 내에 데이터 없이 템플릿만 연결되어있다.

따라서 뷰가 모델의 값을 받아와 템플릿으로 전송해줘야한다.

이를 위해서 Shell 커맨드에서 사용했던 함수를 그대로 사용해주면된다.


우선 GuessNumbers.objects.all()을 이용하여 인스턴스를 모두 불러온다.

이렇게 불러온 데이터는 lottos 안에 저장되며, render 메소드의 3번째 인수로 템플릿에 전달된다.





1
2
3
4
5
6
<div class="container lotto">
  {% for lotto in lottos%}
  <h2>{{lotto.text}}</h2>
  <p> last update: {{lotto.update_date}} by {{lotto.name}}</p>
  <p> {{lotto.lottos|linebreaksbr}}</p>
  {% endfor %}
cs


이제 default.html 값을 수정해줘야 한다.

템플릿에서는 {%%}나 {{}} 를 통해서 파이썬의 문법을 그대로 사용할 수 있다.


일단 우리가 뷰에서 보낸 데이터는 lotto라는 이름으로 전달되었다.

따라서 for 반복문을 통하여 여러개의 로또 결과를 출력한다.

파이썬과 다르게 블럭으로 구분할수 없으므로 for문의 끝은 endfor로 닫아줘야한다.

p태그 안의 linebreaksbr은 자동으로 줄바꿈을 해주는 키워드이다.


이렇게 간단하게 MTV를 연동할 수 있었다.




출처 : 인프런, 파이썬 웹 프로그래밍, Django로 웹 서비스 개발하기


반응형

댓글