我是Django的新手。我阅读了文档,我对媒体根文件和静态根文件感到困惑,我应该把我的css文件和我的javascript文件放在一起。
你们能指出我正确的方向吗? 项目设置:
Project
-myapp
-model,view,and test
-template
- base.html
- index.html
- view1
- view2
- media
- css
- style.css
- ie.css
- js
- img
-setting.py
-url.py
我的static_url,static_root,media_url,media_root,STATICFILES_DIRS和STATICFILES_FINDERS应该是什么样的?
我目前如何加载我的css文件是通过base.html进行的,其中包含以下内容:
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static user_stylesheet %}"type="text/css" media="screen"/>
那么管理静态文件的最佳和最有效/最正确的方法是什么? 谢谢大家的帮助。我感谢您的时间和精力。
答案 0 :(得分:6)
静态文件是一个简单的过程:
Django将在static/
内的任何应用程序中搜索名为INSTALLED_APPS
的目录,以查找静态文件。如果您的文件与任何应用程序无关,则可以将它们放在单独的目录中。这个目录应该添加到STATICFILES_DIRS
(一个元组),所以django知道它。在您的情况下,您应该STATICFILES_DIRS = ('/home/user/Project/template/media',)
将django.contrib.staticfiles
添加到您的INSTALLED_APPS
现在,如果您使用runserver
对此进行测试,请打开urls.py
并将from django.contrib.staticfiles.urls import staticfiles_urlpatterns
添加到顶部,并在定义完所有网址后,在文件末尾,添加urlpatterns += staticfiles_urlpatterns()
您已经有了正确的方法来访问问题中的静态文件。另一种方法是使用{{ STATIC_URL }}
,并确保使用RequestContext
发送回复。如果您使用的是基于类的视图,则无需进行任何更改。对于其他普通视图方法,只需使用render
shortcut。
STATIC_URL
和STATIC_ROOT
在部署时派上用场。
STATIC_URL
是您的Web服务器配置的URL前缀,指向系统中包含静态文件的位置。这是 url组件,必须以斜杠结尾。例如/static/
STATIC_ROOT
这是系统目录的路径。准备好部署时,运行collectstatic
命令,django将找到所有静态文件,并将它们转储到STATIC_ROOT
指向的目录中。然后,您可以将此目录放在您的Web服务器配置的DOCUMENT_ROOT
文件夹中。然后,将/static/
URL指向此文件夹。示例是STATIC_ROOT = /home/user/project/www/
如果Apache配置了DOCUMENT_ROOT
/var/www/
,并且您的STATIC_URL
设置为/static/
;运行collectstatic
后,将文件夹/home/user/project/www/
的内容移至/var/www/static/
。
STATICFILES_FINDERS
。此设置列出了当您运行collectstatic
时django可用于搜索静态文件的方法,而您通常根本不会对此进行修改。MEDIA_ROOT
,MEDIA_URL
。这些设置控制文件系统位置,以及使用django 上传的任何文件的URL前缀;这些 不能与STATICFILES_DIRS
相同。您需要手动处理此问题,因为collectstatic
不会触及这些位置。如果您正在开发中测试文件上传,则可以使用django.views.static.serve()
来提供MEDIA*
中的文件。答案 1 :(得分:1)
媒体服务是Django是一个“事物”。
您可以在此处看到指向文档的链接: https://docs.djangoproject.com/en/dev/howto/static-files/
但神奇的一点如下**如果这不是生产**你可能需要在urls.py
的底部添加以下内容:
from django.conf import settings
# ... the rest of your URLconf goes here ...
if settings.DEBUG:
urlpatterns += patterns('',
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
)
对于生产服务器,您通过网络服务器(apache或其他)提供媒体旧式学校风格,使用相同的域但有效地完全独立于您的Django / Python站点。
答案 2 :(得分:0)
我建议你将所有的js和css文件保存在一个名为'static'的文件夹中,一些文件放在你的应用程序文件夹之外(这就是django推荐的方式) 例如,如果将它保存在/ var / www / static /下 因此,在这种情况下,这就是您的属性的样子: STATIC_DIR =“/ var / www / static /” STATIC_URL =“/ static /”(可以是任何东西) STATICFILES_FINDERS =('django.contrib.staticfiles.finders.FileSystemFinder',)
在模板中,您可以使用模板标记{{STATIC_URL}}引用静态文件夹,并将其余路径附加到静态文件夹中的文件中。注意,要使用{{STATIC_URL}}模板标记,您需要从视图代码中传递context_instance。