Feedjack 読む (2)
続行。試験も色々試しつつ、とは思っているのですがどうなるか。
ええと、まず urls.py から見てみる。ソースを全部 paste すると微妙なのでちょっとづつで、最初のブロックから
urlpatterns = patterns('', (r'^rss20.xml$', redirect_to, {'url':'/feed/rss/'}), (r'^feed/$', redirect_to, {'url':'/feed/atom/'}), (r'^feed/rss/$', views.rssfeed), (r'^feed/atom/$', views.atomfeed),
どんなデータが云々は置いといて順に意味を類推
- 最初のソレは URL が /rss20.xml なら /feed/rss/ に redirect
- 次。URL が /feed/ だったら /feed/atom/ に redirect
- URL が /feed/rss/ なら views.py の rssfeed メソド起動
- URL が /feed/atom なら views.py の atomfeed メソド起動
と見た。次。
(r'^feed/user/(?P<user>\d+)/tag/(?P<tag>.*)/$', redirect_to, {'url':'/feed/atom/user/%(user)s/tag/%(tag)s/'}), (r'^feed/user/(?P<user>\d+)/$', redirect_to, {'url':'/feed/atom/user/%(user)s/'}), (r'^feed/tag/(?P<tag>.*)/$', redirect_to, {'url':'/feed/atom/tag/%(tag)s/'}),
む。最初のでいきなりつまづく。URL ディスパッチャ な文書を見てみた。
む、違うな。先に正規表現から確認した方が良いのかな??
- 名前つき正規表現は (?P
pattern) で表記 - name がグループの名前 (この名前で view に値が渡る
- pattern がマッチさせるパターン
との事。name を参照するには %(name)s という記述で良い模様。ちょっとどこにもこれに関する記述が無いっぽく見えるのですが、探し方が悪いに違いない。
という事で上のソレ達は
- URL が /feed/user/1/tag/xxx/ とかな場合、/feed/atom/user/1/tag/xxxx/ に redirect
- URL が /feed/user/1/ なら /feed/atom/user/1/ に redirect
- URL が /feed/tag/xxxx/ なら /feed/atom/tag/xxxx/ に redirect
次からが実際に view なソレが起動されるナニ。
(r'^feed/atom/user/(?P<user>\d+)/tag/(?P<tag>.*)/$', views.atomfeed), (r'^feed/atom/user/(?P<user>\d+)/$', views.atomfeed), (r'^feed/atom/tag/(?P<tag>.*)/$', views.atomfeed), (r'^feed/rss/user/(?P<user>\d+)/tag/(?P<tag>.*)/$', views.rssfeed), (r'^feed/rss/user/(?P<user>\d+)/$', views.rssfeed), (r'^feed/rss/tag/(?P<tag>.*)/$', views.rssfeed),
ここは割と簡単。
- URL が /feed/atom/なんたら/ だったら views.py の atomfeed メソド起動
- URL が /feed/rss/なんたら/ だったら views.py の rssfeed メソド起動
それぞれ以下な定義になっている
def rssfeed(request, tag=None, user=None): """ Generates the RSS2 feed. """ return buildfeed(request, feedgenerator.Rss201rev2Feed, tag, user) def atomfeed(request, tag=None, user=None): """ Generates the Atom 1.0 feed. """ return buildfeed(request, feedgenerator.Atom1Feed, tag, user)
キーワード引数ってのもナニですな。次。
(r'^user/(?P<user>\d+)/tag/(?P<tag>.*)/$', views.mainview), (r'^user/(?P<user>\d+)/$', views.mainview), (r'^tag/(?P<tag>.*)/$', views.mainview),
上記な URL は views.py の mainview メソド起動。このメソドも
def mainview(request, tag=None, user=None):
な定義。ラストが以下
(r'^opml/$', views.opml), (r'^foaf/$', views.foaf), (r'^$', views.mainview),
views.py には他にもメソドが定義されてるんですが、Django って基本的に urls.py でマッピングされてない URL は 4xx なソレが戻るようになってるんだろうな。
直接起動なソレは
- mainview (内部で initview)
- opml (blogroll の戻りを戻している)
- foaf (blogroll の戻りを戻している)
- atomfeed (buildfeed の戻りを戻している)
- rssfeed (buildfeed の戻りを戻している)
が入口、なんですが views.py なソレは基本的に response を戻してまして、テンプレートとの連携はどこを見れば分かるのでしょうか。
で、よくよく見てみると views.py の中で rendor_to_response (@mainview) とか loader.get_template (@initview) などというナニを呼び出しています。
views.py は掘り下げはじめるとキリが無さそげ。面白いんですが、一旦ストップ。あまり model 方面で試験する項目が無さげなので、こっちで云々と思ってはいるのですが、どうなりますでしょうか。続きは早くって明日だと思います。