![](/img/trans.png)
[英]Django: 400 Error with Debug=False and ALLOWED_HOSTS=[“*”]
[英]Hitting 500 error on django with debug=False even with ALLOWED_HOSTS=["*"]
我嘗試使用的每個頁面上都有 500 個錯誤。 我唯一要更改的是 DEBUG 為 False。
這是我的配置:
SECRET_KEY = os.environ.get("SECRET_KEY", "0$ke!x1bz5cj0mpzo1zfx4omw-c9iqw%m95zb)(2@ddg5s+3!f")
ALLOWED_HOSTS = ['*']
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
# Application definition
INSTALLED_APPS = [
'posts', # Contains all dynamic and static pages related to posts
'courses', # Contains all dynamic and static pages related to courses and modules
'pages', # Contains all static pages that are not post related
'markdownx', # Allows for editing and creating markdown content
'jet.dashboard',
'jet', # Django admin theme override
'pwa', # Sets app to be PWA compliant
'whitenoise.runserver_nostatic', # Serving static files
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
從字面上看,我看到的每個答案都說只是將您的 ALLOWED_HOSTS 設置為 ['*'],正如您所看到的,我已經這樣做了,但仍然沒有骰子。 我檢查了文檔,它們對 DEBUG 模式的其他影響非常稀疏,文檔的一部分說:
作為一項安全措施,Django 不會包含可能敏感的設置,例如 SECRET_KEY。 具體來說,它將排除名稱包含以下任何一項的任何設置:'API' 'KEY' 'PASS' 'SECRET' 'SIGNATURE' 'TOKEN'
https://docs.djangoproject.com/en/2.2/ref/settings/#debug
我唯一能想到的是 secret_key 沒有被拿起,但如果是這樣,你如何在生產中做到這一點?
編輯:有些人一直要求我將調試模式設置為 true 以獲取回溯。 問題是,當我將它設置為 true 時,我沒有收到 500 錯誤,只有在 DEBUG = False 時才會出現。
因此,該問題與 SINGLE ICON NOT LOADING 相關,路徑已關閉,但由於 Django 在 DEBUG=True 時處理靜態文件的方式(老實說是愚蠢的)我沒有發現它,而當 DEBUG=False 時有沒有追溯。
我學到的一個巧妙的技巧是,您可以通過在主 settings.py 中附加一個顯式記錄器來強制 Django 為您提供所需的日志信息,如下所示:
import logging
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
},
},
}
所以我在 6 小時的調試中學到的三件事你處於我的情況:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_STORAGE = '.storage.WhiteNoiseStaticFilesStorage' # Read point 3 for details about this
from whitenoise.storage import CompressedManifestStaticFilesStorage
class WhiteNoiseStaticFilesStorage(CompressedManifestStaticFilesStorage):
manifest_strict = False
我解決了我的
把調試=真
運行 $ python manage.py collect static
如果有任何錯誤,您的靜態文件中的任何錯誤都會出現在您的終端中。 在繼續之前嘗試解決該錯誤。
進入你的主項目/settings.py 而不是通過使用“*”來創建一個通用的允許主機。 將其替換為您的本地主機鏈接,例如:127.0.0。 0.1.
進入瀏覽器的歷史記錄並刪除最近的 cookie 和緩存。
刷新您的項目,僅此而已。
添加一個答案,因為這只是花了我幾個小時來調試,這可能會使其他人免於遇到同樣的問題。
我只在某些管理頁面上收到SERVER ERROR 500
。 有些模型可以正常工作,有些則不行。 我當時懷疑是第三方模塊。
這個問題出現在我身上,因為我使用的是django-nested-inline
並且通過pip
安裝的版本中存在一個錯誤,無法找到修改管理頁面以處理嵌套內聯所需的 jQuery 副本。
此錯誤已修復,因此我需要刪除我正在使用的版本,然后直接從 Github 安裝已修復的版本。
添加一個答案,因為這讓我難住了一段時間和很多答案,雖然它們確實適用於收集您的靜態文件,但如果您在 HTML 中有任何文件/圖像/CSS/js 引用不是,服務器錯誤 500 也可能發生實際上存在於您的項目目錄中。 例如,如果您引用<link href="{% static 'app/css/newStyle.css' %}" rel="stylesheet" />
並且該文件不存在,那么您將收到此錯誤。 檢查哪些文件實際上不存在的最佳方法是在本地環境中運行python manage.py runserver
並加載頁面,以查看終端中出現 404 錯誤的位置,
它可能看起來像這樣: "GET /static/app/css/newStyle.css HTTP/1.1" 404 1876
然后如果不需要,你可以省略對這個文件的引用,或者找到添加它的位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.