本文目的

最近用django开发项目,发现django的静态文件(js,css和img等)配置比较麻烦,开发环境和生产环境的配置还不一样,这里记录一下,作为备忘。我当前使用的版本是django v1.4.3。

吐槽:django的版本不兼容是个大问题,网上搜索相关问题时,解决方案到是一大推,但是均没有标注版本,导致均不能适用当前版本,走了不少弯路。

开发环境配置

需要下面几个步骤

1. 在app目录下创建static目录,将静态文件和相关文件夹放到此目录下,如your_app/static/img等

2. 确保settings.py中的INSTALLED_APPS中包含django.contrib.staticfiles

3. 设置settings.py中的STATIC_URL的值为“/static/”

4. 在模版中使用{{ STATIC_URL }}作为静态文件路径前缀。比如纯在图片文件your_app/static/img/logo.png,那么应用代码为<img src=”{{ STATIC_URL }}img/logo.png”>

5. 渲染模版的Context对象需要换成RequestContext,否则模版中无法引用到STATIC_URL对应的值。

上面的操作步骤参见官方文档:https://docs.djangoproject.com/en/dev/howto/static-files/

特别注意:按照上述设置,settings.py中的DEBUG选项必须设置为True,否则'/static/'无法映射到静态文件目录。参见这里:http://stackoverflow.com/a/4566907/1114397

生产环境配置

我的发布环境是apache,这里只介绍相关配置。

使用apache的静态发布配置,而不使用django的配置,这也是django推荐的方式,因为django认为静态文件配置的方法交给服务器,会更有效。你所需要做的就是在apahce的配置文件中添加一个alice,如下

Alias /static "/your_wsgi/your_app/static"

# 注意结尾都没有斜杠,全路径也没有。

# 如果alias后面的值有反斜杠结尾,那么全路径也需要有,保持一致

“/static”对应django settings.py中配置的STATIC_URL的值。然后添加directory选项,配置相关目录的权限。Apache 2.4版本开始,对directory配置做出了调整,所以这里需要注意,如下:

Apache v2.4及以上版本,

<Directory "/your_wsgi/your_app/static "> 
    Require all granted 
</Directory>

Apache v2.4以下版本

<Directory "/your_wsgi/your_app/static "> 
    Options Indexes FollowSymLinks 
    Order allow,deny 
    Allow from alli 
</Directory>

注意上面红色部分。

Tips:如果访问静态图片遇到403错误,此时说明路径配置成功,离成功不远了。只是路径权限没有配置正确,这时可以看看apahce错误日志,如果出现“client denied by server configuration”,说明是directory的权限没有配置正确,可以查看自己的apache版本,然后做出响应配置。

希望本文对你有用!

最近在学习django框架的使用,想引用静态css文件,怎么都引用不到,从网搜了好多,大多因为版本问题,
和我现在的使用的dango1.1配置不同,根据资料和公司的项目最终解决,于是想整理总结下各版dango静态文件的配置,以备后查;

配置原因:由于django不处理静态文件(css、js、image等),而是交与web服务器处理。
而django的路径处理和其他web框架有些区别,它需要我们手动的配置静态文件的路径,而不能直接引用。

静态文件的配置的分两种:
    第一种为django的开发服务器的配置
    第二种是生产服务器的nginx或apache的web服务配置

第一种,django的开发服务器的静态文件配置,根据django版本的不同,有着比较大的区别。
    dango 1.1静态文件配置:
        1、在项目目录中同settings目录建立static文件夹,其中存放 js 、css 、images文件,可再单独创建文件存放。

我的文件路径:

2、在settings中增加静态文件目录配置:

?
1
STATIC_PATH = os.path.join( os.path.dirname(__file__) , 'static' )

3、在url.py 中增加静态文件的路径 :

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# u静态文件
urlpatterns += patterns('',
     #(r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_PATH}),  
     (r'^images/(?P<path>.*)$' 'django.views.static.serve'
        {'document_root': os.path.join( settings.STATIC_PATH , 'images' ) } ) ,
     (r'^css/(?P<path>.*)$' 'django.views.static.serve'
        {'document_root': os.path.join( settings.STATIC_PATH , 'css' ) } ) ,
     (r'^js/(?P<path>.*)$' 'django.views.static.serve'
        {'document_root': os.path.join( settings.STATIC_PATH , 'js' ) } ) ,  
 )

4、在模板中引用:

?
1
2
<link href="/css/bootstrap.min.css" rel="stylesheet">
<script src="/js/ie-emulation-modes-warning.js"></script>

主要是路径的问题,其他路径应该也可应,比如url.py中的直接使用start/来作为url,以下均匹配,以验证:

?
1
2
3
4
5
6
7
# 匹配static 文件夹及子文件夹中的文件
(r'^static/(?P<path>.*)$''django.views.static.serve',{'document_root': settings.STATIC_PATH}),  
# 匹配image中的文件
#(r'^images/(.*)$' , 'django.views.static.serve', {'document_root': os.path.join( settings.STATIC_PATH , 'images' ) } ) ,
# 配置css文件价中的文件及子文件夹中的文件
#(r'^css/(?P<path>.*)$' , 'django.views.static.serve', {'document_root': os.path.join( settings.STATIC_PATH , 'css' ) } ) ,
#(r'^js/(?P<path>.*)$' , 'django.views.static.serve', {'document_root': os.path.join( settings.STATIC_PATH , 'js' ) } ) ,

django 1.3 静态文件配置:

django1.3提供了django.contrib.staticfiles这个模块,方便使用静态文件,显示图片,使用css等。

默认情况下(如果没有修改STATICFILES_FINDERS的话),Django首先会在STATICFILES_DIRS配置的文件夹中寻找静态文件,然后再从每个app的static子目录下查找,并且返回找到的第一个文件。

settings中新增的配置,MEDIA_ROOT、 MEDIA_URL 、STATIC_ROOT  、STATIC_URL

MEDIA:指用户上传的文件,比如在Model里面的FileFIeld,ImageField上传的文件。如果你定义
MEDIA_ROOT=c:\temp\media,那么File=models.FileField(upload_to="abc/"),上传的文件就会被保存到c:\temp\media\abc。MEDIA_ROOT必须是本地路径的绝对路径。

MEDIA_URL是指从浏览器访问时的地址前缀。

STATIC_ROOT用于存放网站自己的js,css,图片

注意:不要把你项目的静态文件放到这个目录。这个目录只有在运行manage.py collectstatic时才会用到。 Don't put anything in this directory(STATIC_ROOT) yourself; store your static files  in apps' "static/" subdirectories and in STATICFILES_DIRS.

STATIC_URL的含义与MEDIA_URL类似

参考步骤如下:

1、settings配置:

?
1
2
3
4
5
6
7
8
9
10
HERE=os.path.dirname(os.path.dirname(__file__)
MEDIA_ROOT=os.path.join( HERE , 'media').replace('\\','/')
MEDIA_URL = '/media/'
STATIC_ROOT =os.path.join( HERE , 'static').replace('\\','/')
STATIC_URL= '/static/'
ADMIN_MEDIA_ROOT = '/static/admin/' 
STATICFILES_DIRS = (
       os.path.join(HERE,'app1/static/').replace('\\','/'),
       os.path.join(HERE,'app2/static/').replace('\\','/')
)

2、url的配置:

?
1
2
3
4
from django.conf import settings
from djagno.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL , document_root = settings.MEDIA_ROOT )
urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_ROOT )

3、模板的引用:

?
1
2
3
{% load static %}
<img src="{{ get_static_prefix }}images/1.jpg" />
<link href="{get_static_prefix}}css/truple.css />

具体配置,视情况而定,并不一定如此配置,仅供参考,待验证--todo;

django 1.3 往后的静态配置目录结构及方法变动比较小。

django1.4 静态配置:

url.py 增加:

?
1
2
3
## django 自动处理静态文件, 在模板框中可直接通过 static/ 引用
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()

setting.py 配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
BASEPATH = os.path.join( os.path.dirname( os.path.abspath(__file__) ) ,'..')
MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = os.path.join( BASEPATH, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    #'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
import os
TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), '..''templates').replace('\\','/'),)
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'myapp',
)
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version'1,
    'disable_existing_loggers'False,
    'filters': {
        'require_debug_false': {
            '()''django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level''ERROR',
            'filters': ['require_debug_false'],
            'class''django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level''ERROR',
            'propagate'True,
        },
    }
}

模板文件:

?
1
2
    <link rel="stylesheet" href="static/css/my.css">
    <script src="static/js/jquery.js"></script>

待总结--todo

第二种 生成服务器的配置:

nignx的静态文件的配置:

todo

Apache的静态文件的配置:

todo

参考文档:
http://blog.sina.com.cn/s/blog_3fe961ae01016fpk.html
http://ddtcms.com/news/2011/11/21/18/django-1-3-zhong-xian-shi-tu-pian-shi-yong-jing-tai-wen-jian-de-wen-ti-django-static-files/        
http://blog.csdn.net/wenxuansoft/article/details/8580508

Django静态文件配置相关推荐

  1. Django,静态文件配置

    保证django能正常运行的几个注意事项 1.保证你的计算机名不能是中文 2.一个pycharm窗口就对应一个项目(工程) 3.文件路径命名尽量不要用中文 4.启动django确保端口不能重复 5.新 ...

  2. 解决Django静态文件配置pycharm高光问题

    就困扰了我半天的Django静态文件配置问题 更改了setting 文件后 文件参考问题总会高亮让然觉得又错误怪怪的 所以索性直接眼不见心不烦 具体操作如下图: 就这样就可以啦 大功告成! 也顺便提一 ...

  3. 各种 django 静态文件的配置总结【待续】

    2019独角兽企业重金招聘Python工程师标准>>> 最近在学习django框架的使用,想引用静态css文件,怎么都引用不到,从网搜了好多,大多因为版本问题, 和我现在的使用的da ...

  4. Django之静态文件配置

    静态文件 了解静态文件配置之前,我们需要知道静态文件是什么? 静态文件其实指的是像css,js,img等一些被模板需要的文件. 如何在Django中配置我们的静态文件 1.建立static文件夹,将静 ...

  5. Python的web框架Django(1):HTTP、简介、静态文件配置、路由系统、视图函数、模板语言、ORM、Ajax、分页器、forms、Cookie、Session、中间件、ModelForm

    1. HTTP协议 1)HTTP请求协议 请求格式 POST(方法) /form/entry(URI) HTTP/1.1(协议版本) HOST:hackr.jp(服务端地址) Connection:k ...

  6. Django静态文件处理、中间件及Admin站点

    Django静态文件处理.中间件及Admin站点 文章目录 Django静态文件处理.中间件及Admin站点 一.静态文件 1.简介 2.示例 3.配置静态文件 二.中间件 1.简介 2.示例 3.异 ...

  7. fastapi 传输文件存文件_python3 FastAPI框架入门 基本使用, 模版渲染, 数据交互,cookie使用, 上传文件, 静态文件配置...

    [FastAPI框架入门 基本使用, 模版渲染, form表单数据交互, 上传文件, 静态文件配置] 安装pip3 install fastapi [all] pip3 install unicorn ...

  8. Django 静态文件处理

    Django 静态文件处理 前言 配置 staticfiles STATIC_URL STATICFILES_DIRS STATIC_ROOT 前言 Django的静态文件不能像html那样直接放上图 ...

  9. doraemon的python(大更新) django静态文件的配置(出错多的地方)

    ### 12.2 静态文件的使用#### 12.2.1静态文件的配置和使用 settings.py```python STATIC_URL = '/static/' #别名 STATICFILES_D ...

最新文章

  1. 使用python中的Matplotlib绘图示例
  2. 4 款 MySQL 调优工具,公司大神都在用!
  3. 第十二周项目一-实现复数类中的运算符重载(2)
  4. Mysql CPU占用高的问题解决方法小结
  5. Lesson 02:变量、数据类型
  6. X-AdminABP框架开发-系统日志
  7. 微软也加入FB开放计算项目 发布交换机操作系统
  8. 裁缝师(2011特长生 T2)
  9. Android编程之仿微信显示更多文字的View
  10. 谈谈Linux下动态库查找路径的问题
  11. 开源PDF文件处理工具箱
  12. 2021-02-24 PMP 群内练习题 - 光环
  13. win7计算机出现空白图标,Win7系统桌面图标显示异常变未知白色图标解决方法大全...
  14. 零基础html5网站开发学习步骤方法
  15. 《响应式Web设计性能优化》一2.3 Web运行时性能
  16. 如何成为一个区块链开发人员_成为开发人员是社会工作
  17. 珍藏5个在线免费接收国内外手机短信验证码的网络服务
  18. (7)无参构造方法 有参构造方法
  19. 2016百度之星 - 初赛(Astar Round2B)1001 1003~1006
  20. 决策树分类原理(一)26

热门文章

  1. 【Groovy】Groovy 脚本调用 ( Java 类中调用 Groovy 脚本 )
  2. VMware虚拟机 CentOS 6.5系统安装配置详细图文教程 --技术支持TPshop商城
  3. Struts(十六):通过CURD来学习Struts流程及ModelDriven的用法
  4. HotSpot 虚拟机的算法实现
  5. 网络游戏服务器端架构设计(转载)
  6. SugarSync网盘之XML解析
  7. 告别2013,迎接2014
  8. java包的命名规则技巧
  9. 《大道至简》一书第三版,与编辑就本书写作风格的讨论
  10. 删除与剪切有何区别?