https://github.com/lorin/mezzanine-paas


한방에 해결했다.


안돼서 꽤나 시간을 썼는데 허무...


암튼 샘플 앱을 올리면 끝난다~!!!


ㅋㅋㅋ

블로그 서비스를 쓰고는 있는데 아무래도 open api만 가지고는 이런저런 제약 사항들 때문에 맘에 들게 운영하는데 한계가 있다고 느껴져서 설치형 블로그를 찾아보고 있었다.

대표적이자, 가장 대중적인 Wordpress 는 php 기반이다보니 다뤄보지 못한 언어라 부담이 있는게 사실이었다.


이런저런 고민을 하고 있는데 문득 Django기반의 설치형블로그인 Mezzanine이 있던게 기억이 났다. 아무래도 php를 선호하는 웹개발자가 많다보니 다소 생소할 수 있는 서비스라고 생각이 된다. 예전에 중견 개발자 분과 우연찮게 django 스터디를 잠깐 한적이 있었는데 그 때 그 분이 극찬을 하며 소개해줘서 알게 되었는데 wordpress에 뒤지지 않게 많은 기능들을 지원했던 것으로 기억이 됐다.


특히 Django의 경우, Heroku하고 잘 붙어서 서버 구축에 대한 부담도 줄일 수 있다는 장점이 있다.


아직 설치해보진 않았지만 아래 사이트를 참고해서 구축해보려 한다.


http://www.benhavilland.com/blog/deploying-mezzanine-on-heroku/


 잊지말자..


heroku는 python을 지원한다.


만약 heroku에 대해서 잘 모르는 사람은 다음 사이트를 참고 바란다. (https://devcenter.heroku.com/articles/getting-started-with-python#introduction)


웹서버를 쓸일이 있었는데 여러모로 덩치가 큰  django보다 flask가 괜찮을 것 같아 쓰게 되었는데 heroku에서 flask를 쓸수 있다는 것을 처음 알게 되었다.

flask 자체가 하나의 파이썬 파일로 구성되어 있기 때문에 별다르게 할 건 없다.


"heroku dino 생성 --> 프로젝트 연결 --> git을 통해 deploy"


조금 고려할 사항이 있다면 Procfile을 구성하는 것인데 제대로 서비스를 해도 되지 않기 때문에 일단 다음과 같이 작성했다.


web: python flask_server.py

그냥 개발서버 작동시키는 명령어를 쓴거라 작동은 하지만 제대로 된 서비스를 하는 사람에게 권장할 수 있는 방식은 아닌 듯 하다.


그 후에 조금 찾다보니 heroku와 연동하는 라이브러리가 있어 아래에 남겨 놓는다.



참고사이트

- https://github.com/zachwill/flask_heroku

https://github.com/kennethreitz/flask-heroku

개발하는 프로젝트에 스케쥴링 관련 사항이 있다면 반드시 써야 하는 기능이 바로 datetime 모듈이다.

datetime 모듈은 기본 내장 모듈로 대부분의 날짜 관련 기능을 지원하는 강력한 모듈이다


Heroku에 flask서버를 올리게 됐는데, 입력 받은 시점을 기록해야 하는 기능이 필요해서 위 모듈을 쓰게 됐다.

그런데 Heroku region을 미국으로 설정했더니 현재 시점의 시간의 미국기준으로 출력되는 현상이 발생했다.(참고로 우리나라 시간보다 9시간 전)


이런저런 해결책을 찾아봤는데 그냥 단순하게 서버 시간에서 9시간을 추가 하는게 가장 간단한 방법이라 시간을 더하고 빼는 기능을 찾아보았다.


간단하게 이야기해서 "현재시점 구하기" --> "더하거나 뺄 시간을 만들기" --> "+ or - 하기 " 이런 순서를 따른다.


python에서는 시간 단위를 만들기 위해서 timedelta()라는 함수를 이용한다.

아래 사이트를 참고하자면 다음과 같다


class datetime.timedelta([days[seconds[microseconds[milliseconds[minutes[hours[weeks]]]]]]])


예를 들어 9시간 전이라면 아래와 같다.


import datetime


currentTime = datetime.datetime.today()

nineHours = datetime.timedelta(hours=9)


nineHoursAfter = currentTime + nineHours


참고사이트

http://egloos.zum.com/oniondev/v/9687574

처음 개발을 시작 했을 때 웹개발을 좀 해보고자 시작 했었다.

평소에 친한 개발자 친구가 항상  python을 극찬했기 때문에 별 생각없이 개발공부 시작을 python으로 했는데, 당시 웹개발에 있어서 python은 마이너한 친구라는 걸 나중에서야 알았다. 물론 린 개발론이 유행을 타던 시절이라 django가 새롭게 조명받고 있긴 했지만 메이저한 시장에서는 자바나 닷넷등을 쓰던 시절이라 python으로 웹개발을 한다고 하면 일부 사람들은 무슨 웹개발을 python으로 하냐며 웃고 지나가던 그런 경우도 있었다.


그럼에도 불구하고 python을 권장해준 친구가 무슨 말을 그리하냐며 엄청 쉽고 간단하다며 flask를 소개해줬는데, 당시만 해도 웹서버 뭐하는 놈인지 개념조차 없던 시절이라 겁나 어려운걸 소개해줘놓고 쉽다고 하니 장난하나 싶었던 기억이난다.


당시에는 python으로 웹개발하는 걸 소개하는 책도 없어서 뒤지고 뒤져서 딱 한권 나왔는데 아래 서적이었다.


파이썬 웹 프로그래밍
국내도서
저자 : 주성식,홍성민
출판 : 위키북스 2014.01.28
상세보기

 

지금와서 하는 말이지만 비개발자에게 이 책은 정말 추천할수가 없다.

이미 어느 정도  개발을 하고 있다는 것을 전제하고 쓴 책이란 느낌을 지울수가 없는게 한마디로 말해 책에 나온 예제를 따라할 수가 없다.

상황이 그러하다 보니 당시에는 좀 보다가 그냥 포기했었다.


그러다 어제 tistory 오픈 api를 써서 글을 올리는 것을 구현하는 중 redirect url을 제공해야 하는 상황이와서 웹서버를 써야 하나 싶다가 문득  flask가 생각났다.

물론 책을 다시 펼처본건 아니고 flask 홈페이지로 가서 간단한 설치 및 사용법을 보고 웹서버를 만들어봤는데 한마디로 "초간단"


당시에 추천해준 친구를 원망 했던 것을 미안하게 생각하며 간단하게 한번 살펴보면 다음과 같다.



홈페이지: http://flask.pocoo.org/docs/0.11/ 


1.설치

언제나 그렇 듯 python은 pip가 진리...그냥 아래 명령어를 bash에서 입력하면 끝난다.

$ pip install Flask

2.python 파일 하나 만들기 

이름은 whatever...그냥 만든다.

내 경우에는 flask_server.py라는 파일을 만들었다.


파일 안에 코드는 다음과 같다.

# -*- coding: utf-8 -*-
from flask import request
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():


return "hello"




if __name__ == "__main__":

app.run()


3. flask 서버 시작

아래 명령어를 넣어주면 서버가 시작된다.

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/

4. 확인

웹서버는 지금 http://localhost:5000에서 돌아가고 있다.

해당 주소를 치면 "hello"가 출력되는 것을 볼 수 있다.



이렇게 간단하다.

물론 추가적인 모듈이나 라이브러리를 일일히 추가해줘야 한다는 점에서 기능이 복잡한 앱을 개발한다면 django에 비해 불편한점이 있지만 간단한 request, response만 하는 간단한 웹서버라면 강추 한다. 


참고

- http://flask-docs-kr.readthedocs.io/ko/latest/

특정 사이트를 긁어오는데 유용한  Beautifulsoup을 써서 사이트를 긁어오는 작업을 하는 중이었다.


해당 사이트의 순위 정보를 긁어와서 리스트에 [{1:키워드1}, {2:키워드2}] 이런 식으로 담아 넣는 작업을 하게 되었다.

그런데 Python 인터프리터는 Dictionary 안에 한글값이 있을 때 유니코드값을 쏟아내다보니 순위 정보가 제대로 담겨있는지 확인하는데 어려움이 있었다.


Dictionary의 값을 확인하는 방법은 ditionary[key값]으로 확인을 해야 하는데 각dictionary별로 키값이 어떻게 되는지 확인하는 방법이 뭐가 있는지 확인하다보니 dictionary.keys() 함수가 있는 것을 발견했다.


list = [{1:키워드1}, {2:키워드2}, {3:키워드3}]

for i in list:

keyList = i.keys()

print i[keyList[0]]


위와 같은 코드를 돌리면 아래와 같은 값이 출력된다.


키워드1

키워드2

키워드3


솔직히 너무 쉬운 코드긴 한데 암튼 잊지 말자는 의미에서...ㅋ

최근 구글의 firebase 실시간 데이터베이스에 흥미가 생겼기 때문에 이것 저것 해보는 중인데, 그 중에서도 Rest API를 python에서 다루는 것을 실험해보기 위해 python firebase 라이브러리를 설치하게 되었다. 


firebase 공식 사이트에서는 아래 두 python 라이브러리를 소개하고 있다.

1. https://github.com/mikexstudios/python-firebase

2. http://ozgur.github.io/python-firebase/


pip를 지원하기 때문에 아래 명령어를 통해 설치를 하고 IDE인 pycharm을 켜고 프로젝트를 만들었다. 


pip install -e git://github.com/mikexstudios/python-firebase.git#egg=python-firebase


그런데 "from firebase import firebase"가 인식이 안되는 현상이 발생했다.

왜그런가 확인을 하다보니 compile하는 python의 버전이 아까 터미널에서 확인한 버전과 다른 것이 확인이 되었다.


데이터 분석을 공부해보기 위해 Canopy 를 설치하다보니 python버전이 2.6/2,7 두 개가 설치 되어 있었다보니 pip로 설치를 하면 default로 설정되어 있는

Canopy 설치 시에 깔려 있던 2.7.11버전에 라이브러리가 설치되어 있었는데, pycharm에는 2.6.9버전이 컴파일하다보니 라이브러리가 없는 것으로 인식된 것이다.


그래서 버전이 다른 python에  pip로 설치하는 방법을 찾아봤는데 제대로 된 답을 얻을 수가 없었다.

결국 github에 있는 소스를 다운 받은 다음 python setup.py install를 통해 직접 설치하여 해결 할 수가 있었다.


혹시라도 삽질하는 사람 있으면 그냥 직접 설치하시는 방법을 권장한다.

<본 강좌는 Mike Hibbert에 의해 제작되었으며, 제가 정리한 내용이 도움이 된다고 생각되시면 반드시 유투브 페이지에 방문하셔서 추천과 구독을 눌러주세요>

 

이번 강좌에서는 전 강좌에서 urls.py를 app안에 넣었던 것과 같이 templates을 app안에서 쓸 수 있는 방법을 소개한다고 합니다.

template의 modulerize라고 하는데...뭐 자세한 내용은 동영상을 들으시고,

우선 template을 최초에 만든 django_test/templates 에서도 쓸수 있고, article/templates에서도 쓸수 있으려면 어떻게 해야 할까요?

 

이 경우에는 django_test/settings.py를 변경하면 된다.

위 화면 가장 하단에 있는 TEMPLATE_DIRS = ( ROOT_PATH + '/templates') 으로 되어 있던 설정을 다음과 같이 변경한다.

TEMPLATE_DIRS = ( ROOT_PATH + '/templates',
                  ROOT_PATH + '/articles/templates',
)

위와 같이 변경할 경우 articles/templates에서도 지정한 html 파일이 있는지 확인하기 시작한다.

따라서, article app에 해당하는 내용에 대한 template들만 별도로 모아서 관리할 수 있게 됐다고 볼 수 있다.

Django에서 제공하는 Template 문법

자 그럼 django에서 제공하는  template 문법을 보다 구체적으로 살펴보도록 하자.

전장에서 쓴 articles.html파일의 내용을 보면 다음과 같다.

{% for article in articles %}   
<div>

   <h2><a href="/articles/get/{{ article.id }}/">{{article.title}}</a></h2>
   <p>{{article.body}}</p>

 </div>
{% endfor %}

 

 

<결과 화면>

위에 출력되는 내용들을 django template문법으로 제공하는 일부 기능을 제공하면 다른 결과를 얻을 수 있다.

Django 문법은 "|" 를 사용한다.

예를들어 <p>{{article.body}}</p> 를 <p>{{article.body|upper|truncatewords:"10"}}</p> 와 같이 변경하면,

출력되는 내용이 upper 즉 모두 대문자로 변경되며, truncatewords:"10"는 출력되는 글의 길이가 10으로 조정되고 나머지는 ...으로 요약 된다.(lower로 변경하면 모두 소문자가 된다.)

{% for article in articles %}
  <div>
   
   <h2><a href="/articles/get/{{ article.id }}/">{{article.title}}</a></h2>
   <p>{{article.body|upper|truncatewords:"10"}}</p>
   
   
  </div>
{% endfor %}

 

 <결과화면>


 

django Template에서는 python의 if문과 유사한 if문을 제공한다.]

아래와 같이 if문을 쓰는 방법은 python문법과 거의 동일하다고 보면 된다.

{% if articles.count > 0 %}
  {% for article in articles %}
  <div>
   
   <h2><a href="/articles/get/{{ article.id }}/">{{article.title}}</a></h2>
   <p>{{article.body|upper|truncatewords:"10"}}</p>
   
   
  </div>
  {% endfor %}
  
  
{% else %}

 <p>None to show!!</p>
 
{% endif %}

 <결과화면>

if문에서 <를 반대로 설정하면 else에 설정해 놓은 구문이 출력된다.

{% if articles.count < 0 %}
  {% for article in articles %}
  <div>
   
   <h2><a href="/articles/get/{{ article.id }}/">{{article.title}}</a></h2>
   <p>{{article.body|upper|truncatewords:"10"}}</p>
   
   
  </div>
  {% endfor %}
  
  
{% else %}

 <p>None to show!!</p>
 
{% endif %}

<결과화면>

 

 

다음으로는 기본적인 layout을 설정하는 방법을 보자. 어찌보면 가장 핵심적인 내용인데, Tutorial에는 나중에 나온다.ㅎㅎ

우선 기본적인 layout역할을 할 파일을 articles/templates에 base.html이란 이름으로 만들어보자

 

 

 

base.html에 들어갈 내용은 다음과 같다.

<!DOCTYPE html>
<html lang="en">
 
 <head>
  <title> {% block title %}My Base Template{% endblock %}</title>
  <style type="text/css">
   body {
    text=align:center;
   }
   
   #page {
    width:960px;
    text-align:left;
    margin: 10px auto 20px auto;
    background-color:#0c0c0c;
    
   }
   
   #sidebar {
    
    float: left;
    width: 200px;
    border: 1px solid #000;
   } 
   #content {
    float: left;
    width: 600px;
    border: 1px solid #f00;
    padding: 10px;
    }
      
  </style>
  
 </head>
 <body>
  <div id="page">
   
   
  </div>
  <div id="sidebar">
   {% block sidebar %}
   <ul>
    <li><a href="/articles/all"> Articles </a></li>
    <li><a href="/admon/"> Admin</a></li>
    
   </ul>
   {% endblock %}
  </div>
  <div id="content">
   
   {% block content %}This is content area {% endblock %}
   
  </div>
 </body>
 
 
</html>

약간의 css가 들어가서 다소 복잡해 보일 수 있으나 핵심은 {% block something %}으로 정리되는 부분이다.

기본적인 layout 외 변경이 될 부분들을 {% block somting %}{% endblock %}으로 설정해 놓으면 그 부분에 변경될 내용을 HTML파일로 만들어서 삽입할 수 있게 된다. 좀 더 쉬운 이해를 위해서 위 파일을 브라우져에서 실행한 화면을 보자.

 

위 화면을 보면 {% block sidebar %}{% endblock %}과 {% block content %} {% endblock %}으로 설정된 두 영역이 보인다.

위 두 영역은 다른 html 파일을 만들어서 {% extends 'base.html' %} 을 입력하면 기본 layout으로 사용할 수 있고, 삽입을 원하는 영역을 선택하기 위해서 {% block sidebar %} 또는 {% block content %}을 입력하면 html에 작성된 내용이 layout 상의 block 영역에 삽입된다.

아까 만들었던 articles.html / article.html 파일을 적용시키면 다음과 같다.

articles.html

{% extends 'base.html' %}

{% block content %}
  
{% if articles.count > 0 %}
  {% for article in articles %}
  <div>
   
   <h2><a href="/articles/get/{{ article.id }}/">{{article.title}}</a></h2>
   <p>{{article.body|upper|truncatewords:"10"}}</p>
   
   
  </div>
  {% endfor %}
  
  
{% else %}

 <p>None to show!!</p>
 
{% endif %}

{% endblock %}
 

<결과 화면>


article.html

{% extends 'base.html' %}
{% block sidebar %}
<ul>
 <li><a href="/articles/all"> Articlse</a></li>
 <li><a href="/admin/"> Admin</a></li>
</ul>
{% endblock %}

{% block content %}

  <h1> {{article.title}}</h1>
  <p>{{article.body}}</p>
 
{% endblock %}

 <결과 화면>

 

 

 


 

 

<본 강좌는 Mike Hibbert에 의해 제작되었으며, 제가 정리한 내용이 도움이 된다고 생각되시면 반드시 유투브 페이지에 방문하셔서 추천과 구독을 눌러주세요>

Tutorial5은 django의 admin 페이지에 models.py에 만들어놓은 model을 admin에서 직접 보고 관리할 수 있도록 설정하는 것을 보여준다.

 

 

이클립스에서 django 프로젝트를 생성하고, 프로젝트에서 app을 만들면 app폴더 안에 admin.py 파일이 기본적으로 존재한다.

 

article/admin.py 를 열면 아래와 같이 출력이 된다.

위와 같이 나온 화면에 다음과 같이 추가하면 admin페이지에 models.py에 정의한 각각의 Table이 등록된다.

 

 

 

admin.py를 모두 작성하였으면, django_test/urls.py로 들어가서 admin으로 접속할 수 있는 url이 있는지 확인한다. 이클립스를 사용할 경우 기본적으로 입력되어 있으나, 만약 없을 경우에는 아래와 같이 admin 페이지로 이동할 수 있는 경로 url(r'^admin/', include(admin.site.urls)),를 만들어 준다.

 

그리고, http://127.0.0.1:8888/admin/ 을 브라우저에 입력하면 admin 페이지에 접속할 수 있다. 만약 id와 password를 묻는다면, syncdb를 처음 할 때 입력했던 계정 정보를 입력하도록 한다.

 

 

admin 화면에서 Articles에 들어가면 models.py에서 작성한 class Article의 결과물을 직접 눈으로 볼 수 있으며 데이터의 입출력 또한 자유롭게 할 수 있다.

 

 

 

 

 

<본 강좌는 Mike Hibbert에 의해 제작되었으며, 제가 정리한 내용이 도움이 된다고 생각되시면 반드시 유투브 페이지에 방문하셔서 추천과 구독을 눌러주세요>

Tutorial 3에서는 Views.py , urls.py, 그리고 간단한 template에 대한 내용에 대해 설명 합니다. 

 

Tutorial2에서 설명했던 것과 같이 django의 핵심 프로스세에서 urls.py 는 브라우저로 받은 request를 views.py로 연결해주고, views.py는 해당 요청에 대해 서버에서 처리할 부분을 처리하는 역할을 담당 합니다.

views.py에서는 아까 봤던 models.py에서와는 조금 다르게 함수로 받아서 처리 합니다. 모양은 대충 def name(request): 와 같습니다.

아래 화면은 urls.py에서 hello라는 요청을 받았을 경우 처리하는 views.py를 코드 입니다.

 

from django.http import HttpResponse

# Create your views here.

def hello(request):
    name = "mike"
    html = "<html><body> Hi %s, this seems to have worked</body></html>" % name
    return HttpResponse(html)

HttpResponse 는 웹브라우저에 해당 내용을 출력하도록 해줍니다.

간단하게 위 내용을 설명하자면 hello라는 request를 받으면 name이란 변수를 mike라고 설정하고, html이란 변수는 html언어로 Hi "name변수 내 내용", this seems to have workd란 내용을 설정한 후 html 변수 내용을 웹브라우저에 출력해 라고 하는 내용 입니다.

위 내용이 동작하기 위해서는 hello라는 request를 받을 수 있도록 urls.py를 손봐줘야 합니다.

 

urls.py를 처음으로 열면 위와 같은 화면이 나옵니다.

여기에 url(r'^hello/$', 'article.views.hello'), 을 아래 화면과 같이 입력 합니다.

 

그리고 server를 작동하게 하기 위해서 다시 cmd창을 켜고 manage.py runeserver 8888을 입력 합니다.

포트 8888로 서버에 접속할 수 있도록 설정한다고 보시면 됩니다.

(참고:아래 화면에 [19/JUL 로 시작하는 두줄은 server를 작동시킨다음 웹브라우져를 통해서 요청을 했다는 log 입니다. )

위와 같이 server를 작동시킨 후 웹브라우져를 통해서 http://127.0.0.1:8888/hello/ 에 접속하면 다음과 같은 화면이 출력 됩니다.

 

그런데, 아까 views.py에서 직접 html 코드를 입력하여 위와 같은 화면이 출력되도록 했습니다.

그러나 복잡한 html 화면을 만들어야 한다고 할 때, 모든 html코드를 모두 views.py에 입력할 수 없습니다. 그래서 위와 같은 역할을 동일하게 수행하기 위해서 template이라는 것을 사용합니다.(이 부분은 동영상에 나온 것과 조금 다르지만 작동하는데는 전혀 문제 없습니다.)

우선 프로젝트 하위의 동일한 이름의 폴더에 template을 넣을 수 있는 templates폴더를 만듭니다.

 

위와 같이 폴더를 만들고 나면 settings.py에 들어가서 templates 폴더 위치를 모두 알 수 있도록 세팅해줘야 합니다.

settings.py로 이동한 후 import os 하단에 ROOT_PATH = os.path.dirname(__file__) 라고 입력합니다. 

 

그리고 settings.py 가장 하단으로 내려가서 다음과 같이 작성하여 templates 폴더의 위치를 지정해 줍니다.

이렇게 하고나면 templates 폴더의 위치는 지정 완료 됩니다.

자 그럼 views.py에서 template을 불러와 봅시다.

Template을 사용하는 방법에는 여러가지가 있지만 우선 이번 Tutorial에서는 get_templateContext를 불러와서 구현 하는 방법을 가장 먼저 설명 합니다. 그 외에 render_to_response/ TemplateView 를 사용하는 방법은 이 글 하단에서 추가적으로 설명할 예정 입니다.

get_template은 템플릿을 가져올 수 있도록 합니다. 사용 방법은 아래에서 볼 수 있는 것과 같이 get_template('html파일이름') 으로 코딩 합니다.

Context는 dict방식으로 변수의 이름과 속성을 지정 할 수 있도록 합니다. Context를 통해 render된 값들은 html템플릿에 반영되어 Django에서 출력한 속성을 html에 반영될 수 있도록 해줍니다. 사용 방법은 아래 보는 것과 같이, compiled_template.render(Context({dict 이름값: dict 속성값}))으로 코딩 합니다.

 

from django.http import HttpResponse
from django.template.loader import get_template
from django.template import Context

# Create your views here.

def hello(request):
    name = "mike"
    html = "<html><body> Hi %s, this seems to have worked</body></html>" % name
    return HttpResponse(html)

def hello_template(request):
    name = 'mike'
    t = get_template('hello.html')
    html = t.render(Context({'name':name}))
    return HttpResponse(html)

 

template을 불러오기 위해서는 hello.html이 필요 합니다.

우선 templates/hello.html로 파일을 하나 만들고 아래와 같이 html 코드를 작성 합니다.

<html>
 
     <body>
  
          hi, {{name}},
          this Template seems to have worked!!!
  
     </body>
 
</html>

위에서 views.py에서 Context에서 언급했던 것과 같이 Context를 통해 정의된 'name':name 값이 {{name}}으로 지정되어 있습니다. 해당 html 파일을 server에서 작동시키면 {{name}}으로 지정된 곳에 django views.py안의 hello_template에 name이란 변수로 정의되어 있는 값이 html파일에 출력되게 됩니다.

hello.html파일까지 작성이 완료되면 urls.py를 수정하여 브라우져를 통해서 hello_template을 request할 수 있도록 url(r'^hello_template/$', 'article.views.hello_template'), 를 지정 합니다.

위 작업들을 모두하고 브라우져를 통해서 http://127.0.0.1:8888/hello_template/ 을 입력하면 다음과 같이 출력 됩니다.

render_to_response 로 template 사용하기

template을 사용하는 보다 더 간단한 방법이 있다. 바로 render_to_response를 사용하는 방법이다.

우선 render_to_response를 사용하기 위해서 다음과 같이 선언을 해줘야 한다.

from django.shortcuts import render_to_response

그럼 어떻게 간단해지는 보기위해 기존의 코드 부터 보면 다음과 같다.

def hello_template(request):
    name = 'mike'
    t = get_template('hello.html')
    html = t.render(Context({'name':name}))
    return HttpResponse(html)

위 코드에서 get_template으로 hello.html을 불러오고, html파일 안에 출력될 내용을 Context를 통해서 render해주는 과정을 거친 후 HttpResponse를 통해서 출력하는 과정을 거쳤다.

그런데, render_to_response는 위 과정을 간단하게 한줄로 줄였다. 방법은 간단하다. render_to_response('html파일이름', {Context가 render해야 하는 내용}) 으로 끝이다. 구체적인 코드는 다음과 같습니다.

def hello_template(request):
    name = 'mike'
    return render_to_response('hello.html', {'name':name})

위 코드를 테스트해보기 위해서 아래 render_to_response의 이름을 hello_template에서 hello_template_simple로 변경하고, urls.py에서 hello_template_simple url을 추가하도록 하자.

 

 

이후 http://127.0.0.1:8888/hello_template_simple/ 으로 접속하면 다음과 같이 기존과 동일한 결과가 나온다.

 

이 외에도 TemplateView를 통해서 구현하는 방법이 Tutorial에 나와 있다.

+ Recent posts