Django 将Debug=False后无法准确访问静态资源的解决办法

本文档详细介绍了当Django应用将Debug设置为False后,遇到无法访问静态资源的问题及其解决方案。主要涉及在setting.py、urls.py和view.py中的配置调整,包括设置访问域名、静态文件URL映射及异常处理页面设置,适用于Django 2.2环境。

问题描述

在Debug模式下可以正常访问时,切换为False后,页面就无法请求到静态资源了,需要以下几步处理方式:

1. 设置允许访问的域名

2. 添加url映射至静态文件路径

3. 设置异常处理页面

环境:Django 2.2 


一、设置setting.py

# 或是你的域名,或localhost
ALLOWED_HOSTS = ['*'] 
   ...
   ...
# 设置静态资源路径
STATIC_URL = '/static/'
STATIC_ROOT = 'static'


二、设置urls.py

from django.conf.urls import url
from django.views import static
from django.conf import settings
from . import view

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', view.index),
       ........
    # 增加以下一行,以识别静态资源
    url(r'^static/(?P<path>.*)$', static.serve,
        {'document_root': settings.STATIC_ROOT}, name='static')
]
# 配置异常页面
handler403 = view.page_permission_denied
handler404 = view.page_not_found
handler500 = view.page_inter_error

三、设置view.py

def page_not_found(request):
    from django.shortcuts import render
    return render(request, '404.html')
...
...


Django 生产环境中,当 `DEBUG = False` 时,静态文件丢失是一个常见问题。这是由于 Django 在生产模式下不再自动处理静态文件的提供,需要手动配置来解决此问题[^1]。 ### 配置静态文件路径 首先,在 `settings.py` 文件中明确指定静态文件的路径和相关设置: ```python STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static') # 指定收集静态文件的目标目录 ``` - `STATIC_URL`:定义了静态文件在 URL 中的访问前缀。 - `STATIC_ROOT`:指定了一个目录,Django 会将所有应用中的静态文件收集到该目录下,以便统一管理[^3]。 此外,如果希望 Django 在开发阶段从多个位置查找静态文件,可以使用 `STATICFILES_DIRS` 设置额外的搜索路径: ```python STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ] ``` ### 更新 URL 路由以服务静态文件 为了在调试关闭后仍然能够访问静态文件,可以在 `urls.py` 文件中添加以下内容: ```python from django.conf import settings from django.conf.urls.static import static from django.views import static as static_views from django.urls import path, re_path urlpatterns = [ # 其他路由配置 ] # 添加以下代码以确保静态文件在 DEBUG=False 时仍能被访问 urlpatterns += [ re_path(r'^static/(?P<path>.*)$', static_views.serve, {'document_root': settings.STATIC_ROOT}), ] # 或者使用 static() 方法(仅用于开发环境) # urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) ``` 注意:虽然 `static()` 方法可以快速实现静态文件的访问,但不建议在生产环境中直接使用,因为其性能较差且安全性不足。更推荐通过 Web 服务器如 Nginx 或 Apache 来托管静态文件[^4]。 ### 使用 Nginx 或 Apache 托管静态文件 在生产环境中,最佳实践是使用专门的 Web 服务器来处理静态文件,这不仅能提高性能,还能增强安全性。例如,Nginx 可以高效地提供静态资源,并减少对 Django 应用服务器的负担。 配置 Nginx 的示例片段如下: ```nginx server { listen 80; server_name example.com; location /static/ { alias /path/to/your/static/files/; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` - `/static/` 是用户访问静态文件的 URL 前缀。 - `alias` 指向 `STATIC_ROOT` 目录的实际路径。 完成上述配置后,重启 Nginx 服务即可生效。 ### 收集静态文件 最后一步是运行 Django 提供的命令将所有静态文件集中到 `STATIC_ROOT` 指定的目录中: ```bash python manage.py collectstatic ``` 此命令会将项目中所有应用的静态文件复制到 `STATIC_ROOT` 指定的位置,便于后续部署和服务[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值