在管理员中,我希望可以从任何JavaScript访问 admin media url 。
我已将它包含在请求上下文中
但是为了能够从包含的javascript中访问它,
<script type="text/javascript">
window.__admin_media_prefix__ = "{{ ADMIN_MEDIA_URL }}";
</script>
我是否必须在基本模板中添加类似的东西,或者有更清洁的方法吗?
答案 0 :(得分:2)
django不会以任何方式解释媒体(静态)文件。在生产站点上,python代码甚至可能无法访问该文件,因为它们可能由前端webserever提供。所以你有一个疯狂的选择:使用像服务器端包含(SSI)这样的东西,通过以某种方式解析配置文件,将变量内容嵌入到选择的媒体文件中。
更好的想法是为每个站点提供相同的管理媒体前缀方案,为您选择的Web服务器提供灵活的每站点配置文件,其中管理媒体文件将从某个已知位置提供:
location ^~ /media/ {
root /.../django-$django_ver/contrib/admin/;
}
答案 1 :(得分:1)
我可以提供一个有点“邪恶”的解决方案:因为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
)
如果您经常破解Admin中的内容并且不希望使用全局Javascript变量声明来混淆模板,这种方法特别好。