美文网首页
Django基础(六):settings.py

Django基础(六):settings.py

作者: 宇辰星君 | 来源:发表于2017-10-17 21:46 被阅读88次

    参考源码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

    相关文章

      网友评论

          本文标题:Django基础(六):settings.py

          本文链接:https://www.haomeiwen.com/subject/ivyjuxtx.html