Django-从javascript访问admin\u media\u前缀

Django-从javascript访问admin\u media\u前缀,django,django-admin,django-templates,django-staticfiles,Django,Django Admin,Django Templates,Django Staticfiles,在管理中,我希望可以从任何javascript访问管理媒体url。 我已将其包含在请求上下文中。 但是为了能够从包含的javascript访问它 <script type="text/javascript"> window.__admin_media_prefix__ = "{{ ADMIN_MEDIA_URL }}"; </script> 窗口。_uuadmin_media_前缀_uu=“{{admin_media_URL}”; 我必须在基本模板中放入类似的内

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

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

窗口。_uuadmin_media_前缀_uu=“{{admin_media_URL}”;
我必须在基本模板中放入类似的内容吗?或者有更干净的方法吗?

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

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

location ^~ /media/ {
    root        /.../django-$django_ver/contrib/admin/;
}
我可以提供一个有点“邪恶”的解决方案:因为Django 1.4
Django.contrib.admin
正在使用
Django.contrib.staticfiles
来处理所有静态文件。由于管理员的Javascript正在使用
缺少的管理员媒体前缀
,如果找不到它,我们可以进行重定向,例如在Apache中:

RewriteRule ^/missing-admin-media-prefix/(.*)$ /static/admin/$1 [L,R=301]
(当然,如果您的
静态\u URL
设置为
/STATIC


如果你经常在管理中乱搞东西,也不想用全局Javascript变量声明把模板弄得乱七八糟的话,这个方法特别好。

我已经在模板中将我的媒体url打印为:
console.log(“{media\u url}”)
它可以工作!那么这个管理媒体怎么了?它可能不在上下文中正确吗?这是因为它是从模板引擎检索的。但是我说的是从一个单独的js文件中获取这个值。如果你把它放在一个单独的js文件中,你将无法用模板变量ADMIN\U MEDIA\U URL动态设置它。我相信你做这件事的方式是默认的Django方式。