我建立一个应用程序使用Django作为我的主力。到目前为止,一切都很好-指定的数据库设置,配置的静态目录,url,视图等。但是当我想要渲染自己漂亮的自定义404.html和500.html页面时,麻烦就来了。
我阅读了关于自定义错误处理的文档,并在UrlsConf中设置了必要的配置,创建了相应的视图,并将404.html和500.html添加到我的应用程序的模板目录(在settings.py中也指定了)。
但是文档说,在Debug关闭之前,您实际上可以查看自定义错误视图,所以我确实关闭了它来测试我的东西,而那就是事情变得疯狂的时候!
我不仅无法查看自定义404.html(实际上,它加载,但因为我的错误页面每个包含一个图形错误消息-作为一些漂亮的图像),错误页面的源加载,但没有其他加载!甚至没有链接CSS或Javascript!
一般来说,一旦我设置DEBUG = False,所有的视图将加载,但任何链接的内容(CSS, Javascript,图像等)不会加载!发生什么事情了?是否有什么东西我丢失了,关于静态文件和调试设置?
您可以用许多不同的方式调试它。这是我的方法。
localsettings.py:
DEBUG = False
DEBUG404 = True
urls . py:
from django.conf import settings
import os
if settings.DEBUG404:
urlpatterns += patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': os.path.join(os.path.dirname(__file__), 'static')} ),
)
请务必阅读文档;)
https://docs.djangoproject.com/en/2.0/howto/static-files/#limiting-use-to-debug-true
Nginx,设置和url配置
如果你在linux上,这可能会有帮助。
nginx 文件
your_machn: / /维姆etc / nginx sites-available / nginxfile
server {
server_name xyz.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/your_prj;
}
location /media/ {
root /var/www/your_prj;
}
...........
......
}
urls . py
.........
.....
urlpatterns = [
path('admin/', admin.site.urls),
path('test/', test_viewset.TestServer_View.as_view()),
path('api/private/', include(router_admin.urls)),
path('api/public/', include(router_public.urls)),
]
if settings.DEBUG:
import debug_toolbar
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
settings.py
.....
........
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
.....
....
确保运行:
(venv)yourPrj$ ./manage.py collectstatic
yourSys# systemctrl daemon-reload
这是正常且有意为之的行为。
Warning
This will only work if DEBUG is True.
you can actually view custom error views until Debug is Off
如果Django只是从文件系统中读取并发送一个文件,那么它与普通的web服务器相比没有任何优势,所有的web服务器都能够自己提供文件。
此外,如果你用Django提供静态文件,你会让Python进程在请求期间一直很忙,它将无法提供更适合它的动态请求。
由于这些原因,Django静态视图仅设计用于开发期间,如果DEBUG设置为False,则它将无法工作。
因为在开发过程中,我们通常一次只有一个人访问站点
developer), Django可以很好地提供静态文件。
当我使调试= True我的静态是不工作。
如果我在python中运行我的项目manage.py runserver——不安全。这样我也得到了我的静电。
解决方案1:
python manage.py runserver --insecure
解决方案2:
但我需要永久的解决方案。然后我安装PIP install dj-static==0.0.6,并在我的wsgi.py文件中添加一些代码:
from django.core.wsgi import get_wsgi_application
from dj_static import Cling
application = Cling(get_wsgi_application())
然后我在setting.py中添加了一些:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, '/static/')
STATICFILES_DIRS = [
BASE_DIR / "static",
]