如何从Django模板中获取媒体URL?

如何从Django模板中获取媒体URL?,django,django-templates,Django,Django Templates,对于Django如何处理静态内容,我有些困惑。本质上,在settings.py文件中,我们定义了MEDIA\u URL,它指向解析静态媒体(如脚本和样式)时要使用的URL,以及MEDIA\u ROOT,一个指向文件系统中的内容所在位置的引用 然而,如何从模板访问MEDIA\u URL似乎并不清楚,如果我想使用Django的机制加载静态内容,这一点很重要。基本上,我的基本模板有点像这样: <html> <head> {% block styles %}

对于Django如何处理静态内容,我有些困惑。本质上,在
settings.py
文件中,我们定义了
MEDIA\u URL
,它指向解析静态媒体(如脚本和样式)时要使用的URL,以及
MEDIA\u ROOT
,一个指向文件系统中的内容所在位置的引用

然而,如何从模板访问
MEDIA\u URL
似乎并不清楚,如果我想使用Django的机制加载静态内容,这一点很重要。基本上,我的基本模板有点像这样:

<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>
    {% 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 %}

{%block styles%}
{%endblock%}
{%block title%}页面标题{%endblock%}
{%block scripts%}
{%endblock%}

上面的代码真的能工作吗?我听说你必须使用其他插件来启动和运行类似的东西,这似乎有点奇怪,因为定义
MEDIA\u URL
的关键是在模板中使用它。

我要说的是,你不必为你的Js、css、img文件使用MEDIA\u URL和MEDIA\u ROOT

我使用静态根,而不是静态URL!据我所知,MEDIA_*用于上传文件,如图像或任何文档

我还使用STATIC,因为在我的例子中,我有我的js,css,。。。S3存储中的文件!因此,当我运行collectstatic时,只需将所有静态文件复制到我的云存储!因此,在我的模板中,我有如下内容:

<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>
    {% 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 %}
{%block js%}
{%endblock%}
请从以下位置查看此注释:

注意,在Django的早期版本中,放置静态 MEDIA_根目录中的资产以及用户上载的文件,并为其提供服务 两者都在媒体的URL上。介绍静态文件的部分目的 该应用程序是为了使静态文件更容易与其他文件分开 用户上传的文件

因此,您需要使您的MEDIA_根目录和MEDIA_URL 与静态\u根和静态\u URL不同。你需要 自行安排媒体中的文件服务;静态文件可以 根本不处理用户上传的文件。但是,您可以使用 django.views.static.service()视图,用于为根目录中的媒体提供服务 发展;请参阅服务其他目录


要访问模板中的
STATIC\u URL
,请确保
django.core.context\u processors.STATIC
位于
TEMPLATE\u context\u processors
中,并且您使用的是
RequestContext
。更多细节

此外,静态文件应放在
static\u URL
下,而不是
MEDIA\u URL
,除非它是用户上传的内容。

另一个副本的可能副本:查看我的答案,了解有关此问题的选项和一些建议: