1

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

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

我是否必须将类似的东西放在基本模板中,还是有更清洁的方法来做到这一点?

4

2 回答 2

2

django 不会以任何方式解释媒体(静态)文件。在生产站点上,python 代码甚至可能无法访问该文件,因为它们可能由前端网络服务器提供服务。所以你有一个疯狂的选择:使用类似服务器端包含(SSI)的东西,通过以某种方式解析配置文件,将变量内容嵌入到选择的媒体文件中。

更好的主意是为每个站点使用相同的管理媒体前缀方案,为您选择的网络服务器提供灵活的每个站点配置文件,其中管理媒体文件将从某个已知位置提供:

location ^~ /media/ {
    root        /.../django-$django_ver/contrib/admin/;
}
于 2011-12-27T23:10:20.917 回答
1

我可以提供一个有点“邪恶”的解决方案:因为 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 变量声明使您的模板混乱,那么这种方法特别好。

于 2012-12-06T13:17:21.997 回答