django+uwsgi+nginx静态文件加载

本文详细介绍如何在Django项目中管理静态文件,包括在settings中配置STATIC_URL和STATICFILES_DIRS,利用uwsgi和Nginx加载静态文件,以及在模板中正确引用静态资源的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、django加载静态文件
1、首先确保 django.contrib.staticfiles 已经添加到settings.INSTALLED_APPS中。
2、确保在 settings.py中设置了STATIC_URL。

STATIC_URL = '/static/'

3、 app 文件夹下创建一个文件夹 static
在这里插入图片描述
4、在 settings.py中添加 STATICFILES_DIRS,

STATICFILES_DIRS = [os.path.join(BASE_DIR,"monitor/static")]

这里BASE_DIR是项目文件夹(quantmonitor),monitor是应用文件夹

5、引用
5.1单模板引用
在模版(html)中使用 load 标签加载 static 标签。
比如要加载在项目的 static 文件夹下image里 0001.jpg 的。那么示例代码如下:

{% load static %}	# 注意
<img src="{% static '/image/0001.jpg' % /}"

5.2全项目引用
如果不想每次在模版中加载静态文件都使用 load 加载static 标签,那么可以在 settings.py 中的TEMPLATES/OPTIONS 添加 ‘builtins’:[‘django.templatetags.static’],这样以后在模版中就可以直接使用 static 标签,而不用每个html的 load 了。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
            'builtins': ['django.templatetags.static'],     # 全项目引用静态文件
        },
    },
]

二、uwsgi加载静态文件(nginx调通后可关闭)
一般的方法是“映射”指定请求前缀到你的文件系统上的物理目录。

# --static-map mountpoint=path 选项可以实现此目的。
--static-map /images=/var/www/img	# 注意要写绝对路径

修改uwsgi.ini

# static-map = /static=<项目路径>/static	注意有两个=
static-map = /static=/data/monitor/static/	# 注意要写绝对路径

三、Nginx加载静态文件

location /static/ {
alias /data/wwwroot/quantmonitor/monitor/static/; #静态资源路径  注意绝对路径
}

这里配置的location /static 是说请求为/static的静态文件都去/root、wechat_huoyun/static下去找,也就是我们项目根目录下的static去找,而不是我们每个APP下的static文件下去找,网上有很多教程,关于static的配置写法也有很多,
注意alias和root的区别,
root /path相当于访问static的时候是访问/path/static,
而alias /path相当于访问static时是访问/path/。
所以你要是写了root /root/wechat_huoyun/static;nginx会去找/root/wechat_huoyun/static/static里找,那估计就找不到了。
Nginx其他配置详见centos7 部署网页实战记录django+uwsgi+nginx

四、文件同步

4.1settings文件修改:

ALLOWED_HOSTS = ["*"]	#

STATIC_URL = '/static/'     # 通过url直接访问我在项目中的静态文件
STATIC_ROOT = str(os.path.join(BASE_DIR, "monitor/static"))     # 静态文静聚合的目录,app以外的公共文件夹,不做聚合可以不用
# STATIC_ROOT = os.path.join(BASE_DIR, "monitor", "static"),
print(STATIC_ROOT)

STATICFILES_DIRS = [
    # ('css', os.path.join(STATIC_ROOT, 'css').replace('\\','/') ),
    # ('js',os.path.join(STATIC_ROOT,'js').replace('\\','/') ),
    ('image', os.path.join(STATIC_ROOT, 'image').replace('\\', '/')),
    # ('upload',os.path.join(STATIC_ROOT,'upload').replace('\\','/') ),
]

# print(STATICFILES_DIRS)

STATICFILES_FINDERS = (
    "django.contrib.staticfiles.finders.FileSystemFinder",
    "django.contrib.staticfiles.finders.AppDirectoriesFinder"
)

4.2urls文件
静态文件 调用路径

re_path(r'^/monitor/static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}),

注意相对路径,要从项目根目录开始写,我的static存放位置不是直接在项目根目录
如果直接在项目根目录下建static文件夹,写成

re_path(r'^/static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}),

4.3html文件
见本文第一条

五、几个注意点
1、本地修改的文件,要同步到服务器
2、本地文件夹目录,要与服务器一致
3、注意配置文件中标点符号使用半角
4、本地资源显示不出来,先看单独文件路径能否访问,再看静态引用是否正常

参考文献:
Django 模板加载静态文件
https://www.cnblogs.com/jiajiaba/p/10584329.html

使用uWSGI提供静态文件 (更新至1.9)
https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/StaticFiles.html

超详细的django1.8处理centos下nginx上处理静态文件步骤!
https://blog.youkuaiyun.com/wjy397/article/details/51610872

nginx配置访问本地静态资源
https://blog.youkuaiyun.com/zhangcongyi420/article/details/89216867?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

nginx location配置详细解释
https://www.cnblogs.com/jpfss/p/10418150.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

779醒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值