あなたのDjangoテンプレートにはたくさんのJavaScriptを入れないことをお勧めします。特に、プロジェクトが拡大するにつれて、書き込みやデバッグが難しい傾向があります。代わりに、テンプレートをロードする別のスクリプトファイルにすべてのJavaScriptを記述し、単にテンプレートにJSONデータオブジェクトだけを含めてみてください。これにより、JavaScriptアプリケーション全体をJSLintなどで実行したり、縮小したりするなどの作業を行うことができ、Djangoアプリケーションに依存することなくスタティックなHTMLファイルでテストすることができます。 simplejsonのようなライブラリを使用すると、面倒なシリアライゼーションコードの作成に費やす時間も節約できます。
あなたはAJAXアプリケーションを構築している、これは単にこのように行われる可能性があることを想定していない場合は、次の
ビューで:
テンプレートで
from django.utils import simplejson
def view(request, …):
js_data = simplejson.dumps(my_dict)
…
render_template_to_response("my_template.html", {"my_data": js_data, …})
:
<script type="text/javascript">
data_from_django = {{ my_data }};
widget.init(data_from_django);
</script>
データの種類が重要であることに注意してください。my_data
が単純な番号であるか、フォーマットされた日付などのHTMLを含まない制御されたソースの文字列である場合、特別な処理は必要ありませんd。ユーザーが信頼できないデータを提供する可能性がある場合は、escapeまたはescapejsフィルターを使用して衛生的に処理し、cross-site scriptingの攻撃を防ぐためにJavaScriptがデータを安全に処理する必要があります。
日付については、どのように日付を渡すか考えてみることもできます。
:あなたは上記のスニペットの結果と
time_t = {{ time_t }}
ような何かをやったと仮定すると、JavaScriptで
time_t = time.mktime(my_date.timetuple())
:
ジャンゴでは:私はほとんどのUnixのタイムスタンプとして渡すすることが最も簡単な見つけました
my_date = new Date();
my_date.setTime(time_t*1000);
最後に、UTCに注意してください。PythonとDjangoの日付関数がUTCでデータを交換し、ユーザーの現地時間からの煩わしさを避けることができます。
EDIT:javascriptのsetTimeはミリ秒単位で、time.mktimeの出力は秒単位であることに注意してください。だから私たちは1000倍にする必要があります
可能な複製(http://stackoverflow.com/questions/298772/django-template-variables-and-javascript) –