Django - 从javascript访问admin_media_prefix

时间:2011-12-27 12:20:41

标签: django django-admin django-templates django-staticfiles

在管理员中,我希望可以从任何JavaScript访问 admin media url
我已将它包含在请求上下文中 但是为了能够从包含的javascript中访问它,

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

我是否必须在基本模板中添加类似的东西,或者有更清洁的方法吗?

2 个答案:

答案 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变量声明来混淆模板,这种方法特别好。