#Djangoで簡単なアプリケーションを作る前に
views.py やurls.py の設定周りを物凄く簡単に学ぶにはどうすればいいのか。数々の失敗を繰り返す前に基本だけ抑えていくと、あとがスムーズなんじゃないかと考えてみました。
Djangoの導入は過去記事 http://qiita.com/Gen6/items/1848f8b4d938807d082e
今回のうったてとしてテンプレートの段取りが終わっているものとします。
http://qiita.com/Gen6/items/a5562c36fc5c67c89916
過去記事参照で同じようにしておくと話がわかりやすいかと思います。
#時間を表示させてみる
{% extends "base.html" %}
{% block body %}
<p>{{hour}} 時です</p>
{% endblock %}
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^template/$', views.index, name='index'),
]
from datetime import datetime
from django.http.response import HttpResponse
from django.shortcuts import render
def index(request):
Datetime = {
'hour': datetime.now().hour,
}
return render(request, 'index.html', Datetime)
上記を http://127.0.0.1:8000/myapp/ で確認すると時間が表示されるはずです。
タイムゾーンが狂ってる場合は settings.py で 'UTC' から 'Asia/Tokyo' へ変更してください。
#名前を入力したら内容を返すフォームを作ってみる
{% extends "base.html" %}
{% block body %}
<form action="" method="get">
<label>名前:<input type="text" size="20" name="your_name"></label>
<input type="submit" value="送信">
</form>
{% if your_name %}
<p>{{ your_name }}さん、こんにちは。</p>
{% endif %}
{% endblock %}
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.get_query, name='get_query'),
url(r'^template/$', views.index, name='index'),
]
from django.http.response import HttpResponse
from django.shortcuts import render
def get_query(request):
Message = {
'your_name': request.GET.get('your_name'),
}
return render(request, 'index.html', Message)
上記を http://127.0.0.1:8000/myapp/ で確認するとフォームが出て、
フォームに入力した文字列を返します。
#2つの挙動を混在させるにはどうするか
さて、ここからが本題です。
時間を表示させつつ、フォームも生かすにはどうすればよいのでしょうか。
##動かない一例
{% extends "base.html" %}
{% block body %}
<p>{{hour}} 時です</p>
<form action="" method="get">
<label>名前:<input type="text" size="20" name="your_name"></label>
<input type="submit" value="送信">
</form>
{% if your_name %}
<p>{{ your_name }}さん、こんにちは。</p>
{% endif %}
{% endblock %}
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^$', views.get_query, name='get_query'),
url(r'^template/$', views.index, name='index'),
]
from datetime import datetime
from django.http.response import HttpResponse
from django.shortcuts import render
def index(request):
Datetime = {
'hour': datetime.now().hour,
}
return render(request, 'index.html', Datetime)
def get_query(request):
Message = {
'your_name': request.GET.get('your_name'),
}
return render(request, 'index.html', Message)
これでは動きません。
問題点はどこにあるでしょうか。
##動く例
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^template/$', views.index, name='index'),
]
from datetime import datetime
from django.http.response import HttpResponse
from django.shortcuts import render
def index(request):
Message = {
'your_name': request.GET.get('your_name'),
'hour': datetime.now().hour
}
return render(request, 'index.html', Message)
なんとなーく、掴めてきたら色々と設定を試してみるとより理解が深まるのでは、と思います。
実際のアプリケーション作成は別記事にて。
http://qiita.com/Gen6/items/735245423b65698428be