テンプレートとビュー

管理画面は自動生成できるけど、フロントエンドは自分で作る。

    • urls.py の編集
    • views.py の編集
    • テンプレートファイルの作成

3つの手順(単純なケースでは views.py の編集は不要だったりする)で作業する

urls.py


urlpatterns に patterns のインスタンスをセット、さらに追加していく。+=でpatternsを追加できる。
patterns は、さらに url のリストを含んでたりする。

基本は正規表現のURLマッチングと、呼び出す viewメソッドのセットで url に記述する。
プロジェクトと同名のディレクトリには既に urls.py があるので、それがいい例になる。

from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('',
   url(r'^$', TemplateView.as_view(template_name="index.html"), name='home'),
   # Examples:
   # url(r'^$', 'djangotest.views.home', name='home'),
   # url(r'^djangotest/', include('djangotest.foo.urls')),
   # Uncomment the admin/doc line below to enable admin documentation:
   # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
   # Uncomment the next line to enable the admin:
   # url(r'^admin/', include(admin.site.urls)),
)

上から順に評価されるみたいなので http://localhost:8000/admin/doc/ は include('django.contrib.admindocs.urls') で処理され include(admin.site.urls) には入らない。

include では、既にマッチした部分は 被includeファイルには渡されない。上のExamplesにある django.contrib.admindocs.urls の中身を見ると、/admin/doc/にマッチした場合に include されるファイルだけど、
from django.conf.urls import patterns, url
from django.contrib.admindocs import views

urlpatterns = patterns('',
   url('^$',
       views.doc_index,
       name='django-admindocs-docroot'
   ),
   url('^bookmarklets/$',
       views.bookmarklets,
       name='django-admindocs-bookmarklets'
   ),
こんな感じになってて、上のは http://localhost:8000/admin/doc/ にマッチし
下のは http://loclahost:8000/admin/doc/bookmarklets/ にマッチする。


views.py


ビューとは言いつつ、MVCモデルで言うところのCにあたる。
メソッド形式で定義し、パラメータに必ずHttpRequestのオブジェクトを受け取る。
いくつか例を挙げておく

def index(request)
   return HttpResponce("index page")

def hello(request, urlparam)
   return HttpResponce("Hello, World. %s" % urlparam)

def show_template(request)
   return render_to_response(
       "template_file_path.html",
       {'param':'value' },
       RequestContext(request)) 

def redirect_to_root(request)
   return redirect('/')

def redirect_by_viewname(request)
   return redirect('thispackage.views.hello')

def redirect_with_urlparam(request, *args)
   return redirect(('thispackage.views.hello',args=[args[0]])  # 
こいつらにアクセスしようと思ったら、urlsはこんな感じに書く
import views
# ...
url(r'^sample/$', views.index),
url(r'^sample/(?<urlparam>.*/)$', views.hello),
url(r'^sample/template/$, views.show_tamplate),
url(r'^sample/root/$', views.redirect_to_root),
url(r'^sample/view/$', views.redirect_by_viewname),
url(r'^sample/urlparam/(.*)/$', views.redirect_with_urlparam)
#...

ちゃんと試してないので、エラーでたらごめんなさい。


テンプレートファイルの作成

テンプレートファイルはすごく簡単なので、メモ残しておくまでもない。
雛形をつくっておいて、使いまわせば万事解決。

あとで作った雛形ファイルを上げておこうと思う。
CSSとJSを一切つくってないので、レイアウト崩れまくりだけども
アップロードしておいたのはある。
最終更新:2012年11月08日 13:34
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。