這一篇耸序,我們看下setting.py文件。
配置文件
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
這里用到了python中的一個變量 file 這個變量可以獲取當前文件(包括這個代碼的文件)的路徑鲁猩。
os.path.dirname(file)得到文件所在目錄坎怪,再一個os.path.dirname()就是目錄的上一級,BASE_DIR即為項目所在目錄廓握。我們在后面的與目錄有關的變量都用它芋忿,這樣使得移植性更強。
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
當DEBUG = True 時疾棵,如果出現(xiàn) bug 便于我們看見問題所在,但是部署時最好不要讓用戶看見bug的詳情痹仙。
ALLOWED_HOSTS = []
ALLOWED_HOSTS 允許我們設置哪些域名可以訪問是尔,即使在Apache或Nginx等中綁定了,這里不允許的話开仰,也是不能訪問的拟枚。
注意: 當 DEBUG=False 時,這個為必填項众弓,如果不想輸入恩溅,可以用 ALLOW_HOSTS = ['*'] 來允許所有的。
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
STATIC_URL = '/static/'
static是靜態(tài)文件所有目錄谓娃,比如jquery.js, bootstrap.min.css 等文件脚乡。
一般來說我們只要把靜態(tài)文件放在 APP 中的 static 目錄下,部署時用 python manage.py collectstatic 就可以把靜態(tài)文件收集到(復制到) STATIC_ROOT 目錄滨达,但是有時我們有一些共用的靜態(tài)文件奶稠,這時候可以設置 STATICFILES_DIRS 另外弄一個文件夾,如下:
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "common_static"),
'/var/www/static/',
)
這樣我們就可以把靜態(tài)文件放在 common_static 和 /var/www/static/中了捡遍,Django也能找到它們锌订。
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
media文件夾用來存放用戶上傳的文件,與權限有關画株。
有時候有一些模板不是屬于app的辆飘,比如 baidu#html, share.html等。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR,'templates').replace('\\', '/'),
os.path.join(BASE_DIR,'templates2').replace('\\', '/'),
],
'APP_DIRS': True,
]
這樣 就可以把模板文件放在 templates 和 templates2 文件夾中了谓传。
靜態(tài)文件
靜態(tài)文件是指網站中的js蜈项,css,圖片良拼,視頻等文件
setting.py靜態(tài)文件相關實例代碼說明:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
STATIC_URL = '/static/'
#當運行 python manage.py collectstatic 的時候
#STATIC_ROOT文件夾是用來將所有STATICRTFILES_DIRS中所有文件夾中的文件战得,以及各app中static中的文件都復制過來
#把這些文件放在一起,是為了用apache等部署的時候方便使用
STATIC_ROOT = os.path.join(BASE_DIR,'collected_static')
#其它存放靜態(tài)文件的文件夾庸推,可以用來存放項目中共用的靜態(tài)文件常侦,里面不能包含STATIC_ROOT
#如果不想使用STATICFILES_DIRS 可以不用浇冰,都放在app里的static中也可以
STATICFILES_DIRS=(
os.path.join(BASE_DIR,"common_static"),
'/path/to/others/static/', # 用不到的時候可以不寫這一行
)
# 這個是默認設置,Django 默認會在 STATICFILES_DIRS中的文件夾 和 各app下的static文件夾中找文件
# 注意有先后順序聋亡,找到了就不再繼續(xù)找了
STATICFILES_FINDERS = (
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder"
)
靜態(tài)文件放在對應的app下的static文件夾中或者STATICFILES_DIRS中的文件夾中肘习。
當DEBUG=True時,Django 就能自動找到放在里面的靜態(tài)文件坡倔。(Django 通過 STATICFILES_FINDERS 中的“查找器”漂佩,找到符合的就停下來,尋找的過程 類似于 Python 中使用 import xxx 時罪塔,找 xxx 這個包的過程)投蝉。
以自學堂的例子為栗子:
dj18static
├── blog
│ ├── __init__.py
│ ├── admin.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── static # 應用 blog 下的 static, 默認會找這個文件夾
│ │ └── 【zqxt.png】
│ ├── tests.py
│ │
│ └── views.py
├── common_static # 已經添加到了 STATICFILES_DIRS 的文件夾
│ └── js
│ └── 【jquery.js】
│
├── dj18static
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
當 settings.py 中的 DEBUG = True 時,打開開發(fā)服務器 python manage.py runserver 直接訪問 /static/zqxt.png 就可以找到這個靜態(tài)文件征堪。
也可以在settings.py中指定所有app共用的靜態(tài)文件瘩缆,比如jquery.js等。
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "common_static"),
)
把 jquery.js 放在 common_static/js/ 下佃蚜,這樣就可以 在 /static/js/jquery.js 中訪問到它庸娱!
這里暈了好久,這里有三個文件夾谐算,一是app下面的static熟尉,二是共用文件夾common_static,三是在運行python manage.py collectstatic 之后生成的collected_static洲脂。對于前兩個斤儿,我們在公用文件夾下的靜態(tài)文件,可以直接被app訪問腮考,只需將文件夾名雇毫,替換為static。
如果想為靜態(tài)文件分配多個不同的網址時:
踩蔚。棚放。。馅闽。飘蚯。。