from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# ... the rest of your URLconf goes here ...
urlpatterns += staticfiles_urlpatterns()
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
7条答案
按热度按时间tgabmvqs1#
在开发模式下以及 * 使用其他服务器进行本地开发时 *,请将此添加到您的url.py
此处提供更多信息
在生产过程中,你从来没有把gunicorn放在前面,而是使用nginx这样的服务器,它把请求分配给gunicorn工作者池,同时也提供静态文件。
请参阅here
5kgi1eie2#
白噪音
4.0版之后
http://whitenoise.evans.io/en/stable/changelog.html#v4-0
Django的WSGI集成选项(涉及到编辑wsgi.py)已经被移除。相反,您应该将WhiteNoise添加到www.example.com中的中间件列表中settings.py,并从wsgi.py中移除对WhiteNoise的任何引用。更多细节请参见文档。(纯WSGI集成仍然适用于非Django应用。
4.0版之前
Heroku在以下网址推荐此方法:https://devcenter.heroku.com/articles/django-assets:
您的应用程序现在可以直接从Gunicorn提供静态资产。这对于大多数应用程序来说是完全足够的,但是顶层应用程序可能需要使用CDN和Django-Storages。
安装方式:
wsgi.py
:在Django 1.9上测试。
bihw5rsg3#
我在开发环境(使用gunicorn)中使用了以下代码:
然后运行
gunicorn myapp.wsgi
。这与@rantanplan的答案 * 类似 *,但是,它在运行静态文件时不运行任何中间件。pcrecxhr4#
gunicorn应该用于为python“应用程序”本身提供服务,而静态文件由静态文件服务器(如Nginx)提供服务。
这是我的一个配置的摘录:
一些注意事项:
最后:虽然可以从gunicorn提供静态文件(通过启用仅调试的静态文件服务视图),但这在生产中被认为是不好的做法。
bq3bfh9z5#
虽然你可以在开发模式下使用Django来为应用
django.contrib.staticfiles
提供静态文件,但这并不适合生产使用。为了提供静态文件(如Jamie Hewland says),通常使用Nginx将所有请求路由到/static/
还有,和关于Gunicorn / Unicorn的coreyward says一样
并不是为了解决向客户端提供文件所涉及的一系列问题而设计的
同样的道理也适用于其他WSGI服务器,比如uWSGI而不是Gunicorn。
通过uWSGI提供静态文件效率很低。相反,直接从Nginx提供静态文件,完全绕过uWSGI
因此,在生产环境中提供静态文件是NGINX的工作,而不是Django或其他WSGI服务器。
另一种方法是在生产环境中使用WhiteNoise库来处理静态文件,它非常容易设置(您可能希望使用CDN,这样大多数请求就不会到达Python应用程序)。
1.收集静态
1.安装白噪声
1.在www.example.com中添加以下
STATICFILES_STORAGE
settings.py1.将以下内容添加到www.example.com中的
MIDDLEWARE
settings.py(如mracette所述,“根据白噪声文档,您应该将中间件放在django.middleware.security.SecurityMiddleware
之后“)wnvonmuf6#
从Django 1.3开始,就有了django/conf/urls/static.py来处理DEBUG模式下的静态文件:
了解更多信息https://docs.djangoproject.com/en/2.0/howto/static-files/#serving-static-files-during-development
2ul0zpep7#
如果您使用Apache/Gunicorn,那么下面是我如何设置我的。
1.在你的Django根目录中(使用
manage.py
),创建目录mkdir -p django_static/static
1.在项目
settings.py
中设置以下内容:1.运行
python manage.py collectstatic
。这将把静态内容输出到django_static/static
1.使用
gunicorn your_project_name.wsgi
启动您的gunicorn
服务器(外加选项)1.假设您有默认的全局Apache设置,您需要创建一个从
/var/www
到静态目录的软链接:sudo ln -s /path/to/your_django_project/django_static /var/www/your_django_project_static
1.对于您希望指向Django应用的域
www.example.com
,在apache中配置以下虚拟主机,以便将所有提交到https://www.example.com
的请求代理到127.0.0.1:8000
上**,除了**www.example.com/static/
路由(在这种情况下,将文件服务于来自django_static
的此类请求):瞧!