我是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"/>
那么管理静态文件的最佳和最有效/最正确的方法是什么?谢谢大家的帮助 . 我感谢您的时间和精力 .
3 回答
静态文件是一个简单的过程:
Django将在
INSTALLED_APPS
中的任何应用程序内搜索名为static/
的目录,以获取静态文件 . 如果您的文件与任何应用程序无关,则可以将它们放在单独的目录中 . 这个目录应该添加到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
添加到顶部,并在定义所有URL后,在文件末尾添加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
. 这些设置控制文件系统位置,以及 uploaded using django 的任何文件的URL前缀;这些 cannot be the same as STATICFILES_DIRS . 您需要手动处理此操作,因为collectstatic
不会触及这些位置 . 如果您正在开发中测试文件上载,则可以使用django.views.static.serve()来提供MEDIA*
中的文件 .媒体服务是Django是一个“东西” .
您可以在此处查看文档链接:https://docs.djangoproject.com/en/dev/howto/static-files/
但神奇的一点如下**如果这不是 生产环境 **你可能需要在
urls.py
的底部添加以下内容:对于 生产环境 服务器,您通过Web服务器(apache或其他)提供媒体旧学校风格,使用相同的域但有效地完全独立于您的Django / Python站点 .
我建议你把你所有的js和css文件保存在一个名为'static'的文件夹中,某些文件夹在你的应用程序文件夹之外(这就是django推荐它的方式)例如,如果你将它保存在/ var / www / static / So下,在这种情况下,这就是你的属性的样子:STATIC_DIR =“/ var / www / static /”STATIC_URL =“/ static /”(可以是任何东西)STATICFILES_FINDERS =('django.contrib.staticfiles.finders.FileSystemFinder', )
在模板中,您可以使用模板标记{}引用静态文件夹,并将其余路径附加到静态文件夹中的文件中 . 注意,要使用{}模板标记,您需要从视图代码中传递context_instance .