django 生产服务器中的静态文件

Posted

技术标签:

【中文标题】django 生产服务器中的静态文件【英文标题】:django Static files in production server 【发布时间】:2019-11-17 09:28:27 【问题描述】:

我的问题是静态文件(img,样式)。我的代码运行良好,静态文件没有错误,并且在我运行服务器时出现图像,但是当我制作(debug = False)时,图像和样式消失了我在 Linux 服务器 ubuntu 上运行我的代码.... 怎么办我让静态文件显示为 (debug=false)?

in settings.py that is my code
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'music/templates/'),
)

在我的 html 文件中,图像标签是这样的:

<img src="% static 'music/login.jpg' %"  >

【问题讨论】:

当 debug 设置为 False 时,静态文件应用程序被禁用...我建议您阅读 docs.djangoproject.com/en/2.2/howto/static-files 和链接了几次的页面 docs.djangoproject.com/en/2.2/howto/static-files/deployment 您是否使用网络服务器(apache 或 nginx)来为您的应用程序提供服务? 没有...我使用 linux 服务器 ...Iain Shelvington 【参考方案1】:

正如 Jon Clements 评论的那样,如果 debug=False 则 Django 应用程序 staticfiles 被禁用。通常在生产中使用dedicated web server(一个没有运行 Django 来提供静态文件的服务器)。因此,为了解决您的问题,应该设置一个额外的服务器来提供静态文件。

一些高级步骤:

    转到您的 django 设置文件并添加一个 STATIC_ROOT,这将是 Django 放置静态文件的目录;

    运行python manage.py collecstatic让Django收集所有的静态文件并放到STATIC_ROOT目录下;

    当请求在 URL 中包含您的 STATIC_URL(这些请求通常包含 /static/ 或其他内容)时,提供此目录中的文件。例如,这可以使用 Nginx 服务器或 Apache 服务器来完成,如 Django 文档中所述:

https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/modwsgi/#serving-files

就 Nginx 配置而言,一个简短的 sn-p 只是为了说明这种想法,可能类似于:

server 

        listen 80;

        # hey Nginx, once you see something like /static/ in the url
        # try to grab the file that is under the alias directory and
        # return to the user
        location /static/myapp/ 
            alias /var/www/myproject/static/myproject/myapp/;
            access_log true;
            add_header Cache-Control "max-age=120";
        

总结一下:

Django 的staticfiles 应用非常适合本地开发,但并不真正适合生产应用。

因此,提供静态文件通常应由专用且独立的服务器完成,例如 Nginx 或 Apache,这需要一些额外的配置来设置这些服务器。

【讨论】:

以上是关于django 生产服务器中的静态文件的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何在生产中的apache服务器上部署静态文件

django中怎么载入css等静态文件

django中怎么载入css等静态文件

Django提供静态文件服务

docker、nginx、django 以及如何提供静态文件

提供静态文件 django 1.9 生产错误