[Python]Django 配置和静态文件(二)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: [Python]Django 配置和静态文件(二)

🍉 静态资源集合STATICFILES_DIRS

在配置文件settings.py中设置STATICFILES_DIRS配置项,我们可以通过该配置项告诉django本项目的静态资源的存放路径。该配置项的值为列表。

在STATICFILES_DIRS配置项中配置上述两个静态资源文件夹为项目静态资源的存放路径:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/
STATIC_URL = 'static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'test_app/static1')
]

注意,访问静态资源时使用的url格式如下:http://ip地址:端口号/STATIC_URL取值/静态资源路径

在配置了STATICFILES_DIRS配置项之后,STATIC_URL配置项的取值可以任意取值,且也不用保证静态资源文件夹的文件夹名与STATIC_URL配置项的取值一致,只要STATICFILES_DIRS配置项中路径配置正确即可使用STATIC_URL配置项配置的路由访问静态资源,STATIC_URL设置的为浏览器访问静态资源时的路由。

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/
STATIC_URL = 'hahaha/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'test_app/static1')
]


🍉 资源部署STATIC_ROOT

静态资源配置还有STATIC_ROOT,其作用是在服务器上部署项目,实现服务器和项目之间的映射。STATIC_ROOT主要是收集整个项目的静态资源并存放在一个新的文件夹,然后由该文件夹与服务器之间构建映射关系。

当项目的配置属性DEBUG设为True的时候,Django会自动提供静态文件代理服务,此时整个项目处于开发阶段,因此无须使用STATIC_ROOT。当配置属性DEBUG设为False的时候,意味着项目进入生产环境,Django不再提供静态文件代理服务,此时需要在项目的配置文件中设置STATIC_ROOT。

STATIC_ROOT配置如下:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/
STATIC_URL = 'static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
    os.path.join(BASE_DIR, 'test_app/static1')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'myStatic')

设置STATIC_ROOT需要使用Django操作指令collectstatic来收集所有静态资源,这些静态资源都会保存在STATIC_ROOT所设置的文件夹里。

python .\manage.py collectstatic

DEBUG配置项修改为False:

# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True
DEBUG = False
# ALLOWED_HOSTS = [
#     '10.1.109.25'
# ]
ALLOWED_HOSTS = ['*']

后序补充


🍉 媒体资源MEDIA

对于一些经常变动的资源,通常将其存放在媒体资源文件夹,如用户头像、歌曲文件等。媒体资源和静态资源是可以同时存在的,而且两者可以独立运行,互不影响。

🍈 媒体资源路由MEDIA_URL

媒体资源的访问路由配置通过MEDIA_URL配置项进行配置。

在项目的根目录下创建media文件夹用于存放媒体资源,并放置图片:

在配置文件settings.py里设置MEDIA_URL配置项:

MEDIA_URL = 'media/'

🍈 媒体资源路径MEDIA_ROOT

MEDIA_ROOT配置项用于配置媒体资源文件夹media的路径信息。

在配置文件settings.py里设置MEDIA_ROOT配置项:

MEDIA_URL = 'media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

媒体资源配置完成后,还需要将media文件夹注册到Django里,让Django知道如何找到媒体文件,否则无法在浏览器上访问该文件夹的文件信息。

在项目的路由配置文件urls.py文件中,为媒体文件夹media添加相应的路由:

from django.contrib import admin
from django.urls import path, re_path
from test_app import views
# 导入用于配置媒体文件夹media的模块和方法
from django.views.static import serve
from django.conf import settings
urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.text),
    # 配置媒体文件夹media添加相应的路由
    re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]

访问媒体资源进行测试:


🍉 配置模板文件夹templates

在Web开发中,模板是一种较为特殊的HTML文档。这个HTML文档嵌入了一些能够让Django识别的变量和指令,然后由Django的模板引擎解析这些变量和指令,生成完整的HTML网页并返回给用户浏览。

模板是Django里面的MTV框架模式的T部分,配置模板路径是告诉Django在解析模板时,如何找到模板所在的位置。

🍈 项目模板文件夹

在项目的根目录下新建用于存放模板文件的文件夹templates:

在项目配置文件settings.py文件中添加代码,查看BASE_DIR的指向:

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Path(__file__).resolve().parent.parent:settings.py文件所在文件的上两级父级目录
print(BASE_DIR)

在项目配置文件setting.py中找到TEMPLATES配置项,修改TEMPLATES配置项中的DIRS,进行模板文件夹的配置:

记得导入os模块

TEMPLATES = [
    # Django 默认模板引擎
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # templates文件夹在项目的根目录下
        # BASE_DIR指向项目根目录
        # 所以模板文件夹的目录为BASE_DIR / templates
        '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',
            ],
        },
    },
]

模板配置是以列表格式呈现的,每个元素的含义说明:

● BACKEND:定义模板引擎,用于识别模板里面的变量和指令。内置的模板引擎有Django Templates和jinja2.Jinja2,每个模板引擎都有自己的变量和指令语法。

● DIRS:设置模板所在路径,告诉Django在哪个地方查找模板的位置,默认为空列表。模板配置通常配置DIRS的属性值即可。

● APP_DIRS:是否在App里查找模板文件。默认为True。

● OPTIONS:用于填充在RequestContext的上下文(模板里面的变量和指令),一般情况下不做任何修改。

将模板文件夹templates进行标记:

🍈 子应用模板文件夹

创建子应用编写视图函数和路由以及模板文件进行测试:

templates/test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
</body>
</html>

test_app/views.py

from django.shortcuts import render
# Create your views here.
def text(request):
    return render(request, 'test.html')

django_pro/urls.py

from django.contrib import admin
from django.urls import path
from test_app import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('test/', views.text)
]

一般情况下,项目根目录下的templates文件夹通常用于存放共用的模板文件,而对于每个子应用的模板文件夹,可以在项目的配置文件中的模板文件夹配置项中DIRS追加子应用模板文件夹的配置。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
            os.path.join(BASE_DIR, 'test_app/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',
            ],
        },
    },
]

修改子应用的视图函数,新建子应用模板文件进行测试:

test_app/templates/testapp.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>testapp</h1>
</body>
</html>

test_app/views.py

from django.shortcuts import render
# Create your views here.
def text(request):
    print(request)
    return render(request, 'testapp.html')


🍉 Django项目配置jinja2模板引擎

🍈 安装 Jinja2

pip install jinjia2 -i https://pypi.tuna.tsinghua.edu.cn/simple

🍈 配置jinja2模板引擎

在 settings.py 文件中找到项目默认的模板引擎配置项:

将原先的默认模板引擎配置修改为如下配置:

记得导入os模块,用于路径的拼接,import os

TEMPLATES = [
    # Jinja2模板引擎配置
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',  # 配置Jinja2模板引擎
        # BASE_DIR 指向项目根目录
        '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',
            ],
        },
    },
    # Django 默认模板引擎
    {
        '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',
            ],
        },
    },
]

由于在模板引擎的配置项中配置模板文件的加载目录为:

'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 配置模板文件夹路径

且 BASE_DIR 指向项目根目录:

在项目根目录下新建用于存放模板文件的目录 templates(只能使用这个目录名):

设置项目的模板语言:

将用于存放模板文件的目录 templates 标记为模板文件夹:

运行项目:


🍈 Django项目补充 Jinja2 模板引擎环境

由于在Jinja2模板引擎中,读取静态文件和进行重定向较为麻烦,所以需要进行Jinja2 模板引擎环境的补充。通过补充Jinja2 模板引擎环境实现Jinja2自动查找静态文件的路径,我们只需写相对路径即可;实现url()能够解析路由的命名空间实现重定向。

在项目根目录下新建用于管理项目工具文件的包文件夹:

新建Jinja2模板引擎环境的补充文件 jinja2_env.py:

在新创建的 jinja2_env.py 文件中补充 Jinja2 模板引擎的环境配置:

from jinja2 import Environment
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse
def jinja2_environment(**options):
    """jinja2 环境"""
    # 创建环境对象
    env = Environment(**options)
    # 自定义语法:{{ static('静态文件相对路径')}} {{ url('路由的命名空间')}}
    # 对全局的环境配置中 static url 对应的配置进行更新
    # update中接收的参数为字典
    env.globals.update({
        'static': staticfiles_storage.url, # 获取静态文件路径的前缀
        'url': reverse, # 模板中能够使用url()识别路由的命名空间实现重定向(反向解析)
    })
    # 返回环境对象
    return env

在项目配置文件中模板引擎配置项的OPTIONS配置中引入Jinja2模板引擎环境配置的补充文件:

TEMPLATES = [
    # Jinja2模板引擎配置
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',  # 配置Jinja2模板引擎
        # BASE_DIR 指向项目目录
        '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',
            ],
            # 补充 Jinja2 模板引擎环境
            # 'environment': 'utils.jinja2_env.jinja2_environment',
            'environment': 'utils.jinja2_env.jinja2_environment',
        },
    },
    # Django 默认模板引擎
    {
        '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',
            ],
        },
    },
]

运行项目:

相关文章
|
13天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
63 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
12天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
41 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
8天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
21 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
24天前
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
56 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
6天前
|
缓存 前端开发 Java
python之django
python之django
|
8天前
|
Linux 编译器 开发工具
快速在linux上配置python3.x的环境以及可能报错的解决方案(python其它版本可同样方式安装)
这篇文章介绍了在Linux系统上配置Python 3.x环境的步骤,包括安装系统依赖、下载和解压Python源码、编译安装、修改环境变量,以及常见安装错误的解决方案。
19 1
|
8天前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
26 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
6天前
|
开发者 Python
Python POST 请求超时配置
Python POST 请求超时配置
10 0
|
2月前
|
机器学习/深度学习 计算机视觉 Python
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
41 0
|
5月前
|
存储 XML JSON
Python如何读写配置文件?
Python如何读写配置文件?
72 0
下一篇
无影云桌面