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

时间:2019-07-07 18:57:53

标签: django python-2.7 django-templates

我的问题是使用静态文件(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">

1 个答案:

答案 0 :(得分:1)

正如乔恩·克莱门茨(Jon Clements)所说,如果debug=False,则Django应用staticfiles被禁用。通常在生产环境中使用dedicated web server(不运行Django的服务器来提供静态文件)。因此,为解决您的问题,应设置一个额外的服务器来提供静态文件。

一些高级步骤:

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

  2. 为Django运行python manage.py collecstatic,以收集所有静态文件并将它们放置在STATIC_ROOT目录中;

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

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

就Nginx配置而言,一个简短的代码段就可以说明这一点,它可能类似于:

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服务器)完成,这需要一些额外的配置来设置这些服务器。