django--static文件的管理

做网站,不会前端总是不行的,就算自己不深入学习成为前端大拿,套用别人的css和js总还是要会的,因此,静态文件的引用成为了一个topic。

Django创建一个新项目的时候已经默认产生了一些配置,应对小项目足够了,如果追求完美的话,总还需要多了解一些。列出了以下topic。

1、  一个不做任何额外配置的django项目能怎么处理static?

2、  好好规划的static文件目录又是什么样子的?

3、  部署到生产该怎么办?

4、  Django中谁在管理着这些static文件?纯代码层面了哟

答:

1、  没有额外自己添加配置时,和static文件有关的settings,如下(从settings.py中摘出来的)

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'systemadmin.apps.SystemadminConfig',
]

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

STATIC_URL = '/static/'

 

BASE_DIR -->项目的根目录,注释里都写了,如果想要得到项目中的文件路径,用os.path.join(BASE_DIR,….)

INSTALLED_APPS --> 管理staticfiles的Django自带APP,就是这个django.contrib.staticfiles

STATIC_URL --> 文件夹取名要叫static,和BASE_DIR配合,用来找到文件的

有了这些配置,如果我们要有css js image文件需要被html引用,那么需要遵从以下做法:

1)         在创建的app目录下新建static文件夹,下面再创建app同名文件夹,这两个文件夹是必须的,再下层的目录随你喜欢,比如再建css js image文件夹,里面分别放你要用的css js和image文件。

2)         在创建的app目录下新建templates文件夹,下面再创建app同名文件夹,这两个文件夹是必须的,下面放要用的html文件。

3)         让html文件找到这些css js image文件需要:

a)         Html的head标签中

{% load static %}

b)         Head中Css的href用static拼路径

{% static ‘APP名字/path/css文件’ %}

c)         Body末尾Js的src也用static拼路径

{% static ‘APP名字/path/js文件’ %}

d)         静态文件的相互引用,比如css里面加了一个背景图片,load static不起作用了哟,要用相对路径去取

url(“相对路径”)

2、  1的基本配置在什么情况下不够用呢?不够用,就得自己加配置哦。

代码重用,在任何语言编程中都是需要的,在模板的编写中也一样,Django支持模板的继承和包含,因此,基本frame的html(页面布局),常组件的html(输入框、下拉框、多选框啦什么的)会想当然得放一起,大家都用css js放一起,而单独APP用到的html css js image放在APP的templates和static里面。于是形成了一个庞大的目录结构。

 

基于以上目录的安排,仅有基本配置可找不到相应的文件哦,需要修改。

1)         项目的settings.py中,增加STATICFILES_DIRS的[],表示除了app的static文件夹,还要找list中列出的这些地方。我们把根目录下的static文件夹加进去,公用的这些css js和image就能找到了

 

2)         Html中还是需要load static,再用{% static ‘相对路径’%}去拼路径,获取文件

3)         APP中是继承和包含基础的html,那么用{%extend ’相对路径‘%}和{% include ‘相对路径’ %}就行了

3、  部署在生产环境中,通常会将所有的static文件都放在一个地方,以方便管理。而开发模式下,我们已经从2看到了庞大的目录结构,手动去提取不现实,django提供了管理工具,步骤(生产环境上):

1)         在settings.py中添加配置

STATIC_ROOT='/djangolearn/allstatic/'

2)         控制台中敲入

Python manage.py collectstatic

运行完成后,console给出提示

204 static files copied to 'C:\djangolearn\allstatic'.

注意了哦,这里是将所有的static文件全部copy到了上述路径,而不是项目路径下面,我的环境是windows的。

3)         把这个所有文件的集合放到一台web server上提供服务。这里要分情况讨论。

a)         和django程序在一台server上

b)         专用一台server放static

c)         放在云上

具体的部署还需要看how-to guides -->Deploying Django

4、  代码层,必须得承认,我还没有这个心性去看源代码。目前就知道:

1)         “django.contrib.staticfiles” Django的这个自带APP承包了对static文件的管理工作

2)         Setting.py文件中STATIC_URL指定了所有的app下建立static文件夹的名字,staticfiles这个app会自动去找叫static的文件夹

3)         Static文件夹下需再建立一层以APP名字命名的文件夹,以区分彼此

4)         公用的static可以放在一个目录下,但需要手动在settings.py文件中添加STATICFILES_DIRS参数的配置。

猜你喜欢

转载自www.cnblogs.com/susenyan/p/9266364.html