Pytter ビュー
モデルも出来て、コントローラでデータを保存する所まで出来たので後は、表示する部分を作る。どっちがめんどくさいか分からないけど、ページ遷移すると訳が分からなくなってしまう性分なので、Ajax使って必要なデータだけを表示するページに送る事にする。自前APIのレスポンスはJson形式とした。また、JavaScriptはjQueryを使わせてもらうことにした。理由は特にない。ドキュメントが多そうだからかな?
必要そうな事、テンプレートのHTML追加と、コントローラのViewsにメソッドを追加して、それらを結ぶUrlsにも記述を追加する。
追加テンプレート
- one_top.html
- アップデートボタンと、取得数のフォーム、表示領域を持つ
Pytter/one/Views.py
# 指定数のTwitモデルをあたらし日付順で返す def ajax_get_pub(request): postData = request.GET.copy() NoTwit = postData['NumOfTwit'] data = serializers.serialize('json', Twit.objects.all().order_by('-created_at')[:NoTwit]) return HttpResponse(data, mimetype=pytter_mimetype) # ajax 呼び出し用アップデートメソッド 成功したらokを返す。 def ajax_pub_update(request): getPubTwitter() #getFriendTimeline() p = 'ok' return HttpResponse(p, mimetype=pytter_mimetype)
one/template/one_top.html
{% extends "base.html" %} {% block title %} {{ title }} {% endblock %} {% block contents %} {{title}}<br> <input type="text" id="getNumOfTwit" value='20'></textarea><br> <input type="button" value="最新のDB" onClick="jQueryAjax();"> <input type="button" value="アップデート" onClick="jQueryAjaxUpdate();"><div id='update_status'></div> <hr> {% endblock %} <script language="javascript" src="/site/js/jquery-latest.js" type="text/javascript"></script> <script><!-- function jQueryAjax() { var NumOfT = $('#getNumOfTwit').attr('value'); $.get('/Pytter/ajax_get_pub/', {'NumOfTwit':NumOfT}, jQueryRequest); } function jQueryAjaxUpdate() { var NumOfT = $('#getNumOfTwit').attr('value'); $.get('/Pytter/ajax_pub_update/',{},jQueryAjax); } function jQueryRequest(message, status) { var twitAll = eval(message); var allTwit = ''; for(var ii=0; ii<twitAll.length; ii++){ var twitTxt = ''; var oneTwit = ''; oneTwit+="<div class='one_twit'><div class='twit_head'>"+twitAll[ii].fields.usr_id+" : "; oneTwit+=twitAll[ii].fields.usr_name+"/"; oneTwit+=twitAll[ii].fields.usr_screen+" : "; oneTwit+=twitAll[ii].fields.created_at+"</div>"; twitTxt+="<div class='twit_text'>"+twitAll[ii].fields.text+"</div></div>"; allTwit+=oneTwit+twitTxt; } $("div#testDIV").html(allTwit); } //--></script> {% endblock %} {% block css %} .one_twit{ background:#fff; float:center; width:700px; margin:10px auto 0; padding:0px; border-style:solid; border-width: 1px 2px 2px 1px; border-color: #999; } .twit_head{ background:#ccc; margin:0px auto 0; padding:3px; } .twit_text{ background:#eee; float:center; margin:0px auto 0; padding: 4px 10px 4px 10px; }
また、上記テンプレートは、base.htmlを拡張した為以下も必要
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>{% block title %}Untitled{% endblock %}</title> {% block js %} {% endblock %} <style type="text/css"> {% block css %}{% endblock %} </style> </head> <body > {% block contents %}hello world.{% endblock %} </body> </html>