如何从Django模板中获取MEDIA_URL?

时间:2011-09-06 17:21:57

标签: django django-templates

我对Django如何使用静态内容进行操作感到有些困惑。从本质上讲,在settings.py文件中,我们定义MEDIA_URL指向在解析静态媒体(如脚本和样式)时使用的URL,以及MEDIA_ROOT,指向事物的居住地在文件系统上。

但是,如果我想使用Django的机制来加载静态,我怎么能从模板访问MEDIA_URL并且非常重要似乎不太清楚内容。基本上,我的基本模板看起来有点像这样:

<html>
   <head>
       {% block styles %}
       <link rel="stylesheet" href="{{ MEDIA_URL }}styles/master.css"/>
       {% endblock %}
       <title>{% block title %}Page Title{% endblock %}</title>
   </head>
   <body>
      {% block scripts %}
      <script type="text/javascript" src="{{ MEDIA_URL }}scripts/jquery.js"></script>
      {% endblock %}
   </body>
</html>

以上代码是否真的有效?我听说你必须使用其他插件才能得到类似的东西,这看起来很奇怪,因为大概定义MEDIA_URL背后的全部意义就是在模板中使用它。

2 个答案:

答案 0 :(得分:5)

要在模板中访问STATIC_URL,请确保django.core.context_processors.static位于TEMPLATE_CONTEXT_PROCESSORS,并且您使用的是RequestContext。更多详情here

此外,静态文件应放在STATIC_URL下,而不是MEDIA_URL,除非是用户上传的内容。

答案 1 :(得分:1)

我会说你不必为你的Js,css,img文件使用MEDIA_URL和MEDIA_ROOT!

我使用STATIC_ROOT,STATIC_URL代替!据我所知,MEDIA_ *用于上传文件,如图像或任何文件!

我也使用STATIC_ *因为在我的情况下,我在S3存储中有我的js,css,...文件!所以当我运行collectstatic时,它只是将我的所有STATIC文件复制到我的云存储中!所以在我的模板中我有这样的东西:

    {% block js %}
        <script src="{{ STATIC_URL }}js/libs/modernizr-2.0.min.js"></script>
        <script src="{{ STATIC_URL }}js/libs/respond.min.js"></script>
    {% endblock %}

Django docs

中查看此说明
  

注意在早期版本的Django中,放置静态是很常见的   MEDIA_ROOT中的资产以及用户上传的文件,并为其提供服务   都在MEDIA_URL。引入静态文件的部分目的   应用程序是为了更容易保持静态文件分开   用户上传的文件。

     

因此,您需要制作MEDIA_ROOT和MEDIA_URL   与您的STATIC_ROOT和STATIC_URL不同。你需要   安排自己在MEDIA_ROOT中提供文件; staticfiles的确如此   根本不处理用户上传的文件。但是,您可以使用   用于提供MEDIA_ROOT的django.views.static.serve()视图   发展;请参阅服务其他目录。