【问题标题】:django Static files in production serverdjango 生产服务器中的静态文件
【发布时间】: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' %}" width="300" height="300">

【问题讨论】:

标签: django python-2.7 django-templates


【解决方案1】:

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

一些高级步骤:

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

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

  3. 当请求在 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,这需要一些额外的配置来设置这些服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-08
    • 2015-06-19
    • 2013-12-16
    • 2013-11-15
    • 2017-03-05
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    相关资源
    最近更新 更多