Django debug False阻止访问媒体文件夹中保存的文件 urls.py models.py settings.py

我有一个采用文件字段的模型,该文件字段在Django admin中上传。我注意到文件保存在正确的文件夹中。但是,当Debug设置为False时,我无法从管理区域或前端用户界面访问文件。我收到一条错误消息,指出“在服务器上找不到资源”。

该应用程序托管在Heroku上,并在localhost和live中执行相同的操作。我在另一篇文章中读到,Whitenoise可以与Heroku一起使用,但尚未解决问题。有人可以指出正确的解决方法吗?相关文件如下。

更新:添加urls.py

urls.py


from django.contrib import admin
from django.urls import include,path
from django.conf.urls.static import static
from django.conf import settings
from .views import DatasetListView
from django.conf import settings
import pages.views

urlpatterns = [
    path('',include('pages.urls')),path('users/',include('users.urls')),path('accounts/',include('allauth.urls')),path('admin/',admin.site.urls),path('downloads/',views.DatasetListView.as_view(),name='downloads'),# where users download the files
]
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)

models.py

from django.core.files.storage import FileSystemStorage
from django.db import models

class DataSet(models.Model):
    title = models.CharField(max_length=255)
    date_added = models.DateField(auto_now=True)
    file_size = models.CharField(max_length=20)
    file_type = models.CharField(max_length=20)
    data_file = models.FileField(upload_to='delivery/')

    def __str__(self):
        return self.title

settings.py

import os
import django_heroku
import dj_database_url

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = Redacted

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

ALLOWED_HOSTS = []

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','whitenoise.runserver_nostatic','django.contrib.staticfiles','django.contrib.sites',# third-party apps
    'anymail',# project apps
    'pages','users','allauth','allauth.account','allauth.socialaccount',]

AUTH_USER_MODEL = Redacted

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',]

ROOT_urlconf = 'myapp.urls'

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','django.template.context_processors.media',],},]

WSGI_APPLICATION = 'myapp.wsgi.application'


# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2','NAME': 'Redacted','USER': 'Redacted','PASSWORD': 'Redacted','HOST': '/Redacted','PORT': 'Redacted'
    }
}

# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',{
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',{
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',{
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',]


# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS,JavaScript,Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'staticfiles')
STATIcfileS_STORAGE = 'whitenoise.storage.CompressedManifestStaticfilesStorage'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'


AUTHENTICATION_BACKENDS = (
    "django.contrib.auth.backends.ModelBackend","allauth.account.auth_backends.AuthenticationBackend",)

LOGGING = {
    'version': 1,'disable_existing_loggers': False,'formatters': {
        'verbose': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",'datefmt' : "%d/%b/%Y %H:%M:%S"
        },'simple': {
            'format': '%(levelname)s %(message)s'
        },'handlers': {
        'file': {
            'level': 'DEBUG','class': 'logging.FileHandler','filename': 'mysite.log','formatter': 'verbose'
        },'loggers': {
        'django': {
            'handlers':['file'],'propagate': True,'level':'DEBUG','MYAPP': {
            'handlers': ['file'],'level': 'DEBUG',}
}

# Configure Django App for Heroku.
django_heroku.settings(locals())

感谢您的帮助。

wjhwu88 回答:Django debug False阻止访问媒体文件夹中保存的文件 urls.py models.py settings.py

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3045943.html

大家都在问