[英]Django returning 500 Internal Server Error instead of index.html when Debug = False
我的 django web 應用程序出現問題,其中 django 在嘗試獲取 index.django 時返回 500 錯誤。 這僅在 Debug = False 時發生,並且僅在此模板中發生。 所有其他模板正常呈現而沒有錯誤。
我已經嘗試過白噪聲設置,favicon.ico 錯誤,檢查了所有路由,一切似乎都很好,我真的找不到錯誤。 奇怪的是它只發生在 index.html 中。
如果有人可以提供幫助,我將不勝感激,在此先感謝。
設置.py
DEBUG = False
ALLOWED_HOSTS = ['vilytic.herokuapp.com', '127.0.0.1']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'accounts',
'comparer',
]
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_RATES': {
'video_search': '8/day',
'video_id': '8/day'
}
}
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
終端中出現的錯誤
"GET / HTTP/1.1" 500 145
網址.py
from django.contrib import admin
from django.urls import path, include
from . import views
from django.views.generic.base import RedirectView
from django.conf import settings
from django.contrib.staticfiles.storage import staticfiles_storage
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index, name="index"),
path('accounts/', include('accounts.urls'), name="accounts"),
path('comparer/', include('comparer.urls'), name="comparer"),
path('contact/', views.contact, name="contact"),
path(
"favicon.ico",
RedirectView.as_view(url=staticfiles_storage.url("favicon.ico")),
),
]
視圖.py
from django.shortcuts import render
from django.core.mail import EmailMessage
from django.template.loader import render_to_string
from django.conf import settings
def index(request):
return render(request, 'index.html')
這意味着你有一個錯誤,因為DEBUG = FALSE
它沒有顯示錯誤。 您可以在console
中或通過啟用DEBUG
查看錯誤
我以前在使用 Whitenoise 時遇到過這種情況,很難找到原因。 當然假設您在DEBUG = True
時沒有錯誤,請嘗試設置
WHITENOISE_AUTOREFRESH = True
在您的settings.py
。
事實證明,一個 png 文件導致了這個問題。 我不知道為什么 png 文件有時會以大寫字母保存,例如 PNG。 顯然,這導致了白噪聲問題。 我花了很長時間才弄清楚,希望它有幫助。
我的嘗試獲取索引文件時出現了類似的錯誤。
發生錯誤是因為我的網址是這樣配置的:
path('admin/', admin.site.urls)
並試圖在沒有 / 的情況下獲取http://127.0.0.1:8000/admin 。
您可以從路徑中刪除 / 或獲取http://127.0.0.1:8000/admin/ 。
對我來說, static
模板標簽存在問題,但白鼻子確實為我提供了有關問題/錯誤的任何有用信息。
static 文件的地址有錯誤:
<link rel="icon" href="{% static 'images/favicon.png' %}">
應該是
<link rel="icon" href="{% static 'blog/images/favicon.png' %}">
更正地址后,它解決了我的問題。
我最近遇到了這個問題,我不得不刪除
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
並將其替換為
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
我希望這有幫助。
祝你今天過得愉快
您可以將STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
更改為STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
。
您將在提供文件時保持壓縮,但您將丟失 static 文件文件名的散列。
whitenoise.storage.CompressedManifestStaticFilesStorage
所做的是在collectstatic
方法期間將 static 文件作為具有唯一散列名稱的附加文件保存到您的STATIC_ROOT
目錄中。
當您使用 whitenoise 為您的 static 文件提供服務時,它會在瀏覽器中以 4 小時的默認 Cache-Control 緩存文件。 這意味着您頁面的訪問者,當他們第一次訪問您的網站時,會獲得 static 文件,如果他們在這 4 小時內再次訪問 window,他們將使用 ZA81259CEF8E959C3624DF1D456E 文件的緩存版本。 這導致更快的頁面加載時間。
您可以將此緩存控制設置為更長的時間(例如 1 年),但這意味着您對 static 文件所做的任何更新,如果用戶仍然在瀏覽器中獲得 static 文件的緩存版本,則用戶將無法看到.
Django 通過ManifestStaticFilesStorage
提供了一種解決方法。 它使用 hash 生成的文件名保存文件,該文件名僅在文件更新時才會更改。 Whitenoise 將這些文件視為新文件,並在它們發生更改時在瀏覽器緩存中更新它們。 你基本上得到了兩個世界的最好的:更長的緩存控制和用戶瀏覽器如果他們被改變了新的文件。
出於某種原因,django 沒有讀取您的散列文件名。 這與白噪聲無關,是 django "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
問題。 首先嘗試讓它在沒有白噪聲的情況下工作,並弄清楚為什么"django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
會引發 500 服務器錯誤。
我個人有同樣的問題,無法在任何地方找到解決方案。 我決定保持壓縮並將 static 文件的保質期保留為默認 4 小時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.