在管理员中,我希望可以从任何 javascript 访问管理员媒体 url 。
我已经将它包含在请求上下文中。
但是为了能够从包含的 javascript 中访问它,
<script type="text/javascript">
window.__admin_media_prefix__ = "{{ ADMIN_MEDIA_URL }}";
</script>
我是否必须将类似的东西放在基本模板中,还是有更清洁的方法来做到这一点?
在管理员中,我希望可以从任何 javascript 访问管理员媒体 url 。
我已经将它包含在请求上下文中。
但是为了能够从包含的 javascript 中访问它,
<script type="text/javascript">
window.__admin_media_prefix__ = "{{ ADMIN_MEDIA_URL }}";
</script>
我是否必须将类似的东西放在基本模板中,还是有更清洁的方法来做到这一点?
django 不会以任何方式解释媒体(静态)文件。在生产站点上,python 代码甚至可能无法访问该文件,因为它们可能由前端网络服务器提供服务。所以你有一个疯狂的选择:使用类似服务器端包含(SSI)的东西,通过以某种方式解析配置文件,将变量内容嵌入到选择的媒体文件中。
更好的主意是为每个站点使用相同的管理媒体前缀方案,为您选择的网络服务器提供灵活的每个站点配置文件,其中管理媒体文件将从某个已知位置提供:
location ^~ /media/ {
root /.../django-$django_ver/contrib/admin/;
}
我可以提供一个有点“邪恶”的解决方案:因为 Django 1.4django.contrib.admin
使用django.contrib.staticfiles
的是静态的。由于 Admin 的 Javascript 正在使用missing-admin-media-prefix
,如果它没有找到,我们可以做一个重定向,例如在 Apache 中:
RewriteRule ^/missing-admin-media-prefix/(.*)$ /static/admin/$1 [L,R=301]
(如果你STATIC_URL
设置为/static
,当然)
如果您经常在 Admin 中修改一些东西,并且不想用全局 Javascript 变量声明使您的模板混乱,那么这种方法特别好。