2011-09-06 160 views
3

对于Django如何使用静态内容进行操作,我有点困惑。本质上,在settings.py文件中,我们定义了MEDIA_URL,它指向解析静态媒体(如脚本和样式)时使用的URL,以及MEDIA_ROOT,这是对文件系统中文件所在位置的引用。如何从Django模板中获取MEDIA_URL?

但是,它似乎并不清楚,我怎样才能从模板访问MEDIA_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> 

将上述代码的实际工作?我听说你必须使用其他插件来启动和运行,这似乎有点奇怪,因为大概定义MEDIA_URL背后的要点是在模板中使用它。

+3

可能重复的[Django {{MEDIA_URL}}空白](http://stackoverflow.com/questions/3756841/django-media-url-blank) – sdolan

+0

另一个重复:http://stackoverflow.com/questions/ 35288793/django-media-url-tag 查看我对这个问题的选项和一些建议的回答:http://stackoverflow.com/a/42563023/5043802 – elnygren

回答

5

要访问STATIC_URL在你的模板,确保django.core.context_processors.staticTEMPLATE_CONTEXT_PROCESSORS,而且您使用的是RequestContext。更多详情here

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

1

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

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

另外我使用STATIC_ *因为在我的情况下,我有我的js,css,...文件在S3存储!所以当我运行collectstatic时,只需将我的所有静态文件复制到我的云存储中!所以在我的模板,我有这样的事情:

{% 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中提供文件;静态文件 根本不处理用户上传的文件。但是,您可以使用 django.views.static.serve()视图来为 开发中的MEDIA_ROOT服务;请参阅服务其他目录。

相关问题