我对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
背后的全部意义就是在模板中使用它。
答案 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中,放置静态是很常见的 MEDIA_ROOT中的资产以及用户上传的文件,并为其提供服务 都在MEDIA_URL。引入静态文件的部分目的 应用程序是为了更容易保持静态文件分开 用户上传的文件。
因此,您需要制作MEDIA_ROOT和MEDIA_URL 与您的STATIC_ROOT和STATIC_URL不同。你需要 安排自己在MEDIA_ROOT中提供文件; staticfiles的确如此 根本不处理用户上传的文件。但是,您可以使用 用于提供MEDIA_ROOT的django.views.static.serve()视图 发展;请参阅服务其他目录。