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服务器上部署静态文件