2011-12-27 11 views
1

管理者の皆様、管理媒体のURLにはどのjavascriptからでもアクセスできます。
私はすでにそれをリクエストコンテキストに含めました。
しかし含まジャバスクリプトからアクセスできるようにするために、Django - admin_media_prefix javacriptからのアクセス

<script type="text/javascript"> 
    window.__admin_media_prefix__ = "{{ ADMIN_MEDIA_URL }}"; 
</script> 

は、私は基本テンプレートにそのような何かを入れなければならないのか、それを行うためのクリーンな方法がありますか?

+0

私は自分のメディアURLをテンプレートとして 'console.log(" {{MEDIA_URL}} ")'と出力しました!この管理メディアで何が問題になっていますか?文脈に正しくないかもしれませんか? – Ahsan

+0

これは、テンプレートエンジンから取得されたためです。しかし、私は別のjsファイルからこの値を取得することについて話しています。 –

+1

別のjsファイルに配置すると、テンプレート変数ADMIN_MEDIA_URLを使用して動的に設定することができなくなります。私はあなたがそれをした方法がデフォルトのDjangoの方法だと信じています。 –

答えて

2

メディア(静的)ファイルはdjangoによって解釈されません。プロダクションサイトでは、おそらくフロントエンドwebserverによって提供されるため、Pythonコードはそのファイルへのアクセス権を持っていないことさえあります。だからあなたは狂った選択肢があります:によって何らかの形で設定ファイルを解析することによって、可変コンテンツを選択されたメディアファイルに埋め込むために、サーバーサイドインクルード(SSI)のようなものを使用します。

location ^~ /media/ { 
    root  /.../django-$django_ver/contrib/admin/; 
} 
1

良いアイデアは、すべてのサイトで同じ管理メディアprefixスキームは、adminメディアファイルは、いくつかの既知の場所から提供されるだろう選択のあなたのウェブサーバのための柔軟なサイトごとの設定ファイルを持っているだろうDjango 1.4 django.contrib.adminはすべて静的にdjango.contrib.staticfilesを使用しているので、私はやや悪い解決法を提供できます。管理者のJavascriptが見つからない場合はmissing-admin-media-prefixを使用しているため、リダイレクトを行うことができます。 Apacheの中:

RewriteRule ^/missing-admin-media-prefix/(.*)$ /static/admin/$1 [L,R=301] 

を(あなたのSTATIC_URLはもちろん、/staticに設定されている場合)は、管理者にものを中心に多くのことをハックしても、あなたのテンプレートを乱雑にしたくない場合は、この方法は特にいいですグローバルなJavascript変数宣言を使用します。

関連する問題