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

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

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

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

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


当前回答

从这里我得到了一些帮助,混合了一些答案。这里,我把所有的部分相加。[我这样做是为了初学者的帮助,也是为了我将来的使用]

首先的问题是为什么需要Debug=False ! 我把我的项目放在AWS中,由于内存泄漏,几个小时后连接超时。 一开始我想用芹菜。[当然我只是个初学者] 然后把DEBUG=False从DEBUG=True改为DEBUG=False,正如我们在settings.py中看到的安全警告

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

一旦我这样做,我的静态文件在网页中加载不成功。 然后我到处搜索,首先尝试从这里——insecure命令运行服务器。

python manage.py runserver --insecure

这是成功的,但我不希望我的项目在生产时采用不安全模式。 在我看来,正确的解决方法是以下步骤。

首先,我纠正了settings.py中的静态URL、根目录和目录

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

然后通过命令收集静态文件

python manage.py collectstatic

现在是第二步,[这里也提供了] 首先在命令行中的项目目录中安装白噪声

pip install whitenoise

然后添加'whitenoise.middleware。在settings.py中中间件列表中的WhiteNoiseMiddleware'。

这应该添加在django.middleware.security下面。SecurityMiddleware'以及所有其他中间件。这样你的中间件列表看起来就像这样:-

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware', #after this line
    'whitenoise.middleware.WhiteNoiseMiddleware', #add it exactlyhere
    'django.contrib.sessions.middleware.SessionMiddleware', #before this
    '...'
]

在你安装的应用程序顶部添加'whitenoise.runserver_nostatic',这样你安装的应用程序列表将看起来像这样

INSTALLED_APPS = [
    'whitenoise.runserver_nostatic',
    'django.contrib.admin',
    'django.contrib.auth',
    '...'
]

完成后,您现在就可以在生产环境中提供静态文件了!![我对我当地的环境也是这样做的]

只要像往常一样使用runserver命令,不需要任何不安全或其他任何东西。

python manage.py runserver

繁荣! !这对我很有用。 哈哈哈。我知道我有点孩子气,但我现在很开心。

感谢所有在这里提供答案并帮助我工作的人。

其他回答

关闭调试后,Django将不再为你处理静态文件——你的生产web服务器(Apache或其他)应该处理这些。

我今天得到了这个问题,这在开发时解决了它,如果你仍然需要服务器本地静态(例如测试没有调试),你可以在不安全模式下运行devserver:

Manage.py runserver——不安全

不要担心,因为在生产环境中,这个托管平台(Apache、Heroku et c)将为您处理静态文件的服务。

注意:Heroku不服务器静态文件,你会想把它放在AWS或MS Azure上

我对我的project/urls.py做了以下更改,它为我工作

加上这一行: 导入url

并补充: url (r ^媒体/ (? P <路径>。*)的美元,,{“document_root”:设置。MEDIA_ROOT}), urlpattern。

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

如果你在开发中使用静态服务视图,你必须有DEBUG = True:

警告 这只在DEBUG为True时有效。 这是因为这种观点过于粗暴 效率低下,而且可能不安全。 这只适用于本地 开发,绝不应该使用 在生产中。

文档:在开发中提供静态文件

更新链接,还有这个

编辑:你可以添加一些url只是为了测试你的404和500模板,只是在你的url中使用通用视图direct_to_template。

from django.views.generic.simple import direct_to_template

urlpatterns = patterns('',
    ('^404testing/$', direct_to_template, {'template': '404.html'})
)