参考源码django.conf.global_settings.py文件
- BASE_DIR
变量_file_指当前文件(包含这个代码的文件),os.path.dirname(file) 得到文件所在目录,再来一个os.path.dirname()就是目录的上一级,BASE_DIR 即为项目所在目录。
我们在后面的与目录有关的变量都用它,这样使得移植性更强。
# settings.py
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
$ python manage.py shell
In [10]: from suynblog.settings import BASE_DIR
In [11]: print BASE_DIR
/root/suyn_website/suynblog
-
ALLOWED_HOSTS
ALLOWED_HOSTS 允许你设置哪些域名可以访问,即使在 Apache 或 Nginx 等中绑定了,这里不允许的话,也是不能访问的。
当 DEBUG=False 时,这个为必填项,如果不想输入,可以用 ALLOW_HOSTS = ['*'] 来允许所有的。 -
static
# settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'static')
## 共用的静态文件存放位置,不能包含 STATIC_ROOT
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "common_static"),
'/var/www/static/',
)
## 默认的静态文件查找器
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
]
$ python manage.py shell
In [12]: import os
In [13]: print os.path.join(BASE_DIR,'static')
/root/suyn_website/suynblog/static
静态文件存储位置:
各APP 中的 static 目录下(同样跟template类似,app/static/app/xx)
STATICFILES_DIRS设定路径下
部署时用 python manage.py collectstatic 就可以把这两个地方的静态文件收集到(复制到)STATIC_ROOT目录。
收集静态文件
$ python manage.py collectstatic
You have requested to collect static files at the destination
location as specified in your settings:
/root/suyn_website/suynblog/static
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
Copying '/root/suyn_website/suynblog/common_static/js/jquery.js'
Copying '/root/anaconda2/lib/python2.7/site-packages/bootstrap_admin/static/bootstrap_admin/config.json'
...
Copying '/root/anaconda2/lib/python2.7/site-packages/django/contrib/admin/static/admin/js/actions.js'
...
Copying '/root/suyn_website/suynblog/learn/static/learn/back.jpg'
???
其它参考办法(当你想为静态文件分配多个不同的网址时,可能会用上这个):
当然也可以自己指定静态文件夹, 在urls.py的最后边这样写
# static files
import os
from django.conf.urls.static import static
from django.conf import settings
if settings.DEBUG:
media_root = os.path.join(settings.BASE_DIR,'media2')
urlpatterns += static('/media2/', document_root=media_root)
# 或者
from django.conf.urls.static import static
urlpatterns = ...
urlpatterns += static('/media2/', document_root=media_root)
- media
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
media文件夹用来存放用户上传的文件,与权限有关
- template
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR,'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
有时候有一些模板不是属于app的,比如 baidutongji.html, share.html等,可以放到路径/root/suyn_website/suynblog/templates
网友评论