ビューで動的 CSS ファイルを作成し、その CSS ファイルをロードするテンプレートをレンダリングしたいと考えています。ビューに与えられた引数によっては、ビューが呼び出されるたびに特定の場所で CSS の値が異なる場合があります。どうすればそれを行うことができますか?(私は、Python/Django でファイルを作成した経験がないことを付け加えておきます。)
これがどのように機能すると思われるかの簡単な例を次に示します。
# urls.py
urlpatterns = patterns('',
(r'^myview/(?P<color>[0-9a-f]{6})/$', create_css_file),
)
# views.py
def create_css_file(request, color):
raw = "@charset 'UTF-8';\n\n"
raw += "body {\n"
raw += " color: #" + color + ";\n"
raw += "}\n\n"
f = open('mydynamic.css', 'r+')
f.write(raw)
return render_to_response('mytemplate.html', locals())
# mytemplate.html
{% extends "base.html" %}
{% block head %}
<link rel="stylesheet" media="screen" href="{{ f.name }}" />
{% endblock %}
結果の HTML ページのソース コードでは、CSS ファイルが正しく読み込まれているように見えますが、何らかの理由でそれが機能しません。f
行<link>...
を_
<link rel="stylesheet" media="screen" href="{{ f }}" />
(f
の代わりにf.name
)。ただし、HTML は目的の色設定なしでレンダリングされます。それがなぜなのか誰か教えてもらえますか?
パスの問題が疑われ、さまざまなパスでかなりいじりましたが、役に立ちませんでした。
数百の可能性があるため、いくつかのハードコーディングされた CSS ファイルを準備するようにアドバイスしないでください (同様の質問への回答で見つけたように)。