我建立一个应用程序使用Django作为我的主力。到目前为止,一切都很好-指定的数据库设置,配置的静态目录,url,视图等。但是当我想要渲染自己漂亮的自定义404.html和500.html页面时,麻烦就来了。

我阅读了关于自定义错误处理的文档,并在UrlsConf中设置了必要的配置,创建了相应的视图,并将404.html和500.html添加到我的应用程序的模板目录(在settings.py中也指定了)。

但是文档说,在Debug关闭之前,您实际上可以查看自定义错误视图,所以我确实关闭了它来测试我的东西,而那就是事情变得疯狂的时候!

我不仅无法查看自定义404.html(实际上,它加载,但因为我的错误页面每个包含一个图形错误消息-作为一些漂亮的图像),错误页面的源加载,但没有其他加载!甚至没有链接CSS或Javascript!

一般来说,一旦我设置DEBUG = False,所有的视图将加载,但任何链接的内容(CSS, Javascript,图像等)不会加载!发生什么事情了?是否有什么东西我丢失了,关于静态文件和调试设置?


当前回答

当我使调试= 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",
]

其他回答

虽然这不是最安全的,但您可以在源代码中进行更改。进入Python/2.7/site-packages/django/conf/urls/static.py目录

然后像下面这样编辑:

if settings.DEBUG or (prefix and '://' in prefix):

因此,如果settings.debug==False,它不会对代码产生影响,同样在运行try python manage.py runserver——runserver后运行静态文件。

注意:信息仅用于测试

您可以使用WhiteNoise在生产环境中提供静态文件。

安装:

pip install WhiteNoise==2.0.6

把你的wsgi.py文件改成这样:

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

你可以开始了!

归功于Handlebar创意博客。

但是,真的不建议在生产环境中以这种方式提供静态文件。你的生产web服务器(比如nginx)应该处理这个问题。

我同意Marek Sapkota的回答;但是你仍然可以使用django URFConf来重新分配url,如果静态文件被请求的话。

步骤1:在settings.py中定义STATIC_ROOT路径

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

步骤2:然后收集静态文件

$ python manage.py collectstatic

步骤3:现在定义URLConf,如果static位于url的开头,则从静态文件夹staticfiles中访问文件。注意:这是你项目的urls.py文件:

from django.urls import re_path
from django.views.static import serve

urlpattern += [
  re_path(r'^static/(?:.*)$', serve, {'document_root': settings.STATIC_ROOT, })
]

您可以用许多不同的方式调试它。这是我的方法。

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

如果你仍然需要服务器静态本地(例如测试没有调试),你可以在不安全模式下运行devserver:

manage.py runserver --insecure