Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t Django在设置中dubug=False时提供静态文件?_Django - Fatal编程技术网

为什么';t Django在设置中dubug=False时提供静态文件?

为什么';t Django在设置中dubug=False时提供静态文件?,django,Django,当我尝试运行项目时,静态文件丢失,settings.debug设置为False。实际上在Django中,当您在开发服务器上运行项目时,在将调试设置更改为False后尝试提供静态文件时,它不会提供静态文件。它将在生产或分段服务器上正常工作,但在本地主机服务器上不能正常工作。 不过,通过在不安全模式下运行开发服务器,您仍然可以实现这一点 试试这个 python manage.py runserver --insecure 实际上,在Django中,当您在开发服务器上运行项目时,当您将调试设置更改为

当我尝试运行项目时,静态文件丢失,settings.debug设置为False。

实际上在Django中,当您在开发服务器上运行项目时,在将调试设置更改为False后尝试提供静态文件时,它不会提供静态文件。它将在生产或分段服务器上正常工作,但在本地主机服务器上不能正常工作。 不过,通过在不安全模式下运行开发服务器,您仍然可以实现这一点

试试这个

python manage.py runserver --insecure

实际上,在Django中,当您在开发服务器上运行项目时,当您将调试设置更改为False后尝试提供静态文件时,它不会提供静态文件。它将在生产或分段服务器上正常工作,但在本地主机服务器上不能正常工作。 不过,通过在不安全模式下运行开发服务器,您仍然可以实现这一点

试试这个

python manage.py runserver --insecure

Django不在生产环境中提供静态文件(当
DEBUG=False
时),因为这样做是用他们自己的话(如文档部分所述):

这种方法效率极低,可能不安全,因此 它不适合生产

人们可能会说,为什么这是低效的?静态文件通常比普通的HTML文件大,加上一个网站肯定会有大量的静态文件。如果Django在生产环境中提供静态内容,那么服务器的大部分时间将浪费在提供这些静态文件上。另外,为了同时服务多个请求,我们同时运行多个Django进程,如果有多个静态文件请求,这将导致进程浪费时间服务它们,如果没有空闲进程,则会导致其他请求等待

另外,正如他们在评论中提到的,Django不能很好地处理压缩(人们可能希望压缩他们的静态文件,这样服务器和客户端都需要较少的带宽)。此外,Django应该更多地关注其设计的任务,即呈现用户请求的页面(一个CPU限制的任务),而提供静态文件主要只是一个输入/输出(I/O)任务,Django将时间花在这些任务上(即使在效率不高的情况下)显然是一种浪费


像NGINX或Apache这样的服务器可以更有效地服务静态文件,因此最好在生产中使用它们,而不是让Django来做。有关如何为生产配置静态文件的详细信息,请参见

Django不在生产中提供静态文件(当
DEBUG=False
时),因为这样做是用他们自己的话(如文档部分所述):

这种方法效率极低,可能不安全,因此 它不适合生产

人们可能会说,为什么这是低效的?静态文件通常比普通的HTML文件大,加上一个网站肯定会有大量的静态文件。如果Django在生产环境中提供静态内容,那么服务器的大部分时间将浪费在提供这些静态文件上。另外,为了同时服务多个请求,我们同时运行多个Django进程,如果有多个静态文件请求,这将导致进程浪费时间服务它们,如果没有空闲进程,则会导致其他请求等待

另外,正如他们在评论中提到的,Django不能很好地处理压缩(人们可能希望压缩他们的静态文件,这样服务器和客户端都需要较少的带宽)。此外,Django应该更多地关注其设计的任务,即呈现用户请求的页面(一个CPU限制的任务),而提供静态文件主要只是一个输入/输出(I/O)任务,Django将时间花在这些任务上(即使在效率不高的情况下)显然是一种浪费


像NGINX或Apache这样的服务器可以更有效地服务静态文件,因此最好在生产中使用它们,而不是让Django来做。有关如何为生产配置静态文件的详细信息,请参见

,不建议这样做,但如果您刚刚开始并想了解更多有关情况的信息,则还可以直接链接:

URL.py:

from django.conf.urls.static import static
from django.contrib import admin

from djangoapp import settings
from webtools.views import *
from django.urls import path, include

"""
direct link on the server in production 
"""
from django.views.static import serve as mediaserve
from django.conf.urls import url


urlpatterns = [
    path('admin/', admin.site.urls),  
    path('', include('webtools.urls')),
]

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        path('__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
else:
    # direct link on server in production
    urlpatterns += [
        url(f'^{settings.MEDIA_URL.lstrip("/")}(?P<path>.*)$', mediaserve, {'document_root': settings.MEDIA_ROOT}),
        url(f'^{settings.STATIC_URL.lstrip("/")}(?P<path>.*)$', mediaserve, {'document_root': settings.STATIC_ROOT}),
    ]

不建议这样做,但如果您刚刚开始,并且想了解更多正在发生的事情,那么您也可以直接链接:

URL.py:

from django.conf.urls.static import static
from django.contrib import admin

from djangoapp import settings
from webtools.views import *
from django.urls import path, include

"""
direct link on the server in production 
"""
from django.views.static import serve as mediaserve
from django.conf.urls import url


urlpatterns = [
    path('admin/', admin.site.urls),  
    path('', include('webtools.urls')),
]

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        path('__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
else:
    # direct link on server in production
    urlpatterns += [
        url(f'^{settings.MEDIA_URL.lstrip("/")}(?P<path>.*)$', mediaserve, {'document_root': settings.MEDIA_ROOT}),
        url(f'^{settings.STATIC_URL.lstrip("/")}(?P<path>.*)$', mediaserve, {'document_root': settings.STATIC_ROOT}),
    ]

我还要补充一点,django不能很好地处理压缩,这会将cpu绑定的工作负载(页面呈现…)与I/o绑定的工作负载(服务静态内容)混合在一起,所以这不是一个好主意……我还要补充一点,django不能很好地处理压缩,这会将cpu绑定的工作负载(页面呈现…)与I/o绑定的工作负载混合在一起(提供静态的东西)所以不是个好主意。。。