如何从Django模板中获取媒体URL?
对于Django如何处理静态内容,我有些困惑。本质上,在如何从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 %}
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
,除非它是用户上传的内容。另一个副本的可能副本:查看我的答案,了解有关此问题的选项和一些建议: