DjangoのSTATIC_URLでハマった

初ブログ……ども


Flaskでハローワールドできたので、フルスタックいける! って思ったけどアレで、公式ドキュメントとかをひたすら徘徊して解決したので忘れないうちにメモ。
ちなみに、Django自身は静的ファイルの取り扱いは非推奨で、基本的にはサーバに任せてね、あくまで開発中限定ですよってスタンスらしい。

実体の置き場所

これは各appの直下にstaticというサブフォルダ作っておいておく。
そうするとDjangoが勝手に収集してよしなにしてくれるらしい。

settings

特にいじんない。

View

ここがわからなくてずっとハマってた。
Djangoのテンプレートには、{{ STATIC_URL }}タグが用意されているのはすぐにわかったのだけれど、なぜかレンダリング時に想定しているパス(settingsのSTATIC_URL)に置き換わってくんない。

しかし、どうやらテンプレートをレンダリングしてレスポンスで返すときに、ContextをRequestContextとして指定してやらねばならぬらしい。
というわけで下記のような感じにする。引数の詳しいところは公式ドキュメントとかを参考にしよう。

from django.template import Context, RequstContext
from django.shortcuts import render_to_response

def index(request):
    return render_to_response('login.html',
        {},
        context_instance=RequestContext(request))

こんな感じ。
ショートカットを使わない場合でも、テンプレートのrenderに渡すものをRequestContextにしてあげれば大丈夫。


ああしかし、こんないい加減な理解では、サーバで動かすときにまたハマるのが目に見えているけどまぁいいか。