Django 媒体文件在生产时未显示 Debug = False - Django 1.10
Django media files not showing with Debug = False on production - Django 1.10
我目前有静态文件和媒体两种文件 files.The 静态文件包含我的 css,js 和其他静态内容。媒体文件包含用户 uploads.The 静态文件夹就在我部署的机器上的媒体 folder.Now 旁边的内容。如果我设置 DEBUG = False
我的静态文件显示得很好但是我的媒体内容永远不会显示。我收到 404 not found
错误。
我的问题是当 DEBUG = False 时如何在生产环境中显示媒体内容。使用 DEBUG= True 似乎一切正常?我阅读了以下 page 并尝试了这些东西。
1-尝试为静态媒体创建单独的文件夹,就像静态内容一样。
目前我的静态内容由 collectstatic
命令管理。我在 webfaction.I 上使用 apache 有一个名为 static_content
的静态文件夹,当我 运行 ./manage.py collectstatic
静态文件夹中的所有内容都被复制到 static_content
folder.I 尝试创建另一个名为 static_media
的静态文件夹。然而,当我 运行 ./manage.py collectstatic
我的 media
文件夹的内容被复制到 static_content
而不是像它应该的那样 static_media
。谁能告诉我为什么 collectstatic 命令没有将内容粘贴到 static_media
而不是?
这就是我的配置
ALLOWED_HOSTS = [
"*",
'mywebsite.com',
'www.mywebsite.com.com',
]
STATIC_URL = 'http://mywebsite.com.com/static/'
STATIC_ROOT = '/home/admin/webapps/static_content'
STATICFILES_DIRS = (
'/home/admin/webapps/mainfolder/mainapp/static',
'/home/admin/webapps/mainfolder/mainapp/media',
)
PROJECT_PATH = os.path.join(BASE_DIR, 'static')
MEDIA_URL = 'http://mywebsite.com.com/media/'
MEDIA_ROOT = '/home/admin/webapps/static_media'
这就是我的 urls.py 的样子
admin.autodiscover()
urlpatterns = [
....
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我是否使用正确的方法创建一个单独的文件夹来管理我的媒体内容,就像在 DEBUG=False 时管理我的静态内容一样?如果是这样,那么为什么 collectstatic 命令将我所有的媒体内容转储到我的 static_content
文件夹而不是 static_media
文件夹中?此外,如果我在用户上传数据时使用静态文件夹来管理我的媒体内容,那么这些数据将上传到 media
或 static_media
。
您不应该使用 collectstatic
作为您的媒体目录。从 STATICFILES_DIRS
中删除 '/home/admin/webapps/mainfolder/mainapp/media'
,然后设置
MEDIA_ROOT = '/home/admin/webapps/mainfolder/mainapp/media'
完成此操作后,static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
应在 DEBUG = True
时提供媒体文件。
对于 DEBUG = False
,您必须 configure Apache 才能提供媒体文件。
在您的 urls.py
文件中:
添加这一行
from django.views.static import serve
在 urlpatterns 中添加这两个 url:
url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),
它对我有用:)
如果您使用的是 Nginx,请让它为媒体文件提供服务
对于示例
转到 nginx/sites-available 并添加这个
location /media/ { root */home/myprojectdir/myproject*; }
我遇到了与 DEBUG=False
相同的问题。我通过像这样在服务器块中配置 Nginx 媒体位置来解决它
location /media/ {
root FULL_PATH_TO_APP;
}
FULL_PATH_TO_APP 是我的 media
文件夹所在目录的完整路径。
在 Pythonanywhere 服务器中
只是
添加静态文件 url 和 目录
URL
/静态/
/媒体/
目录路径
/home/taukir707/myblog/static
/home/taukir707/myblog/media
这是最好的解决方案。将媒体文件夹保存在静态文件夹中。并在
中使用此代码
Settings.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/
if(DEBUG==True):
STATIC_URL = '/static/'
MEDIA_URL = '/static/media/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')
]
STATIC_ROOT='/home/username/websitedomain/static'
MEDIA_ROOT='/home/username/websitedomain/static/media'
else:
STATIC_URL = '/static/'
MEDIA_URL='static/media/'
STATIC_ROOT=os.path.join(BASE_DIR,'static')
MEDIA_ROOT=os.path.join(BASE_DIR,'static/media/')
提供媒体文件的简单文章在这里您可以阅读它,只有两个简单的步骤:
Article Link
感谢社区!
这对我帮助很大
settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
INSTALLED_APPS = [
'django.contrib.staticfiles',
'whitenoise.runserver_nostatic',
]
在 url.py 中导入 URL 并提供静态和媒体文件 URL
from django.views.static import serve
from django.conf.urls import url
我目前有静态文件和媒体两种文件 files.The 静态文件包含我的 css,js 和其他静态内容。媒体文件包含用户 uploads.The 静态文件夹就在我部署的机器上的媒体 folder.Now 旁边的内容。如果我设置 DEBUG = False
我的静态文件显示得很好但是我的媒体内容永远不会显示。我收到 404 not found
错误。
我的问题是当 DEBUG = False 时如何在生产环境中显示媒体内容。使用 DEBUG= True 似乎一切正常?我阅读了以下 page 并尝试了这些东西。
1-尝试为静态媒体创建单独的文件夹,就像静态内容一样。
目前我的静态内容由 collectstatic
命令管理。我在 webfaction.I 上使用 apache 有一个名为 static_content
的静态文件夹,当我 运行 ./manage.py collectstatic
静态文件夹中的所有内容都被复制到 static_content
folder.I 尝试创建另一个名为 static_media
的静态文件夹。然而,当我 运行 ./manage.py collectstatic
我的 media
文件夹的内容被复制到 static_content
而不是像它应该的那样 static_media
。谁能告诉我为什么 collectstatic 命令没有将内容粘贴到 static_media
而不是?
这就是我的配置
ALLOWED_HOSTS = [
"*",
'mywebsite.com',
'www.mywebsite.com.com',
]
STATIC_URL = 'http://mywebsite.com.com/static/'
STATIC_ROOT = '/home/admin/webapps/static_content'
STATICFILES_DIRS = (
'/home/admin/webapps/mainfolder/mainapp/static',
'/home/admin/webapps/mainfolder/mainapp/media',
)
PROJECT_PATH = os.path.join(BASE_DIR, 'static')
MEDIA_URL = 'http://mywebsite.com.com/media/'
MEDIA_ROOT = '/home/admin/webapps/static_media'
这就是我的 urls.py 的样子
admin.autodiscover()
urlpatterns = [
....
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我是否使用正确的方法创建一个单独的文件夹来管理我的媒体内容,就像在 DEBUG=False 时管理我的静态内容一样?如果是这样,那么为什么 collectstatic 命令将我所有的媒体内容转储到我的 static_content
文件夹而不是 static_media
文件夹中?此外,如果我在用户上传数据时使用静态文件夹来管理我的媒体内容,那么这些数据将上传到 media
或 static_media
。
您不应该使用 collectstatic
作为您的媒体目录。从 STATICFILES_DIRS
中删除 '/home/admin/webapps/mainfolder/mainapp/media'
,然后设置
MEDIA_ROOT = '/home/admin/webapps/mainfolder/mainapp/media'
完成此操作后,static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
应在 DEBUG = True
时提供媒体文件。
对于 DEBUG = False
,您必须 configure Apache 才能提供媒体文件。
在您的 urls.py
文件中:
添加这一行
from django.views.static import serve
在 urlpatterns 中添加这两个 url:
url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),
它对我有用:)
如果您使用的是 Nginx,请让它为媒体文件提供服务
对于示例
转到 nginx/sites-available 并添加这个
location /media/ { root */home/myprojectdir/myproject*; }
我遇到了与 DEBUG=False
相同的问题。我通过像这样在服务器块中配置 Nginx 媒体位置来解决它
location /media/ {
root FULL_PATH_TO_APP;
}
FULL_PATH_TO_APP 是我的 media
文件夹所在目录的完整路径。
在 Pythonanywhere 服务器中 只是 添加静态文件 url 和 目录
URL
/静态/
/媒体/
目录路径
/home/taukir707/myblog/static
/home/taukir707/myblog/media
这是最好的解决方案。将媒体文件夹保存在静态文件夹中。并在
中使用此代码Settings.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/
if(DEBUG==True):
STATIC_URL = '/static/'
MEDIA_URL = '/static/media/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')
]
STATIC_ROOT='/home/username/websitedomain/static'
MEDIA_ROOT='/home/username/websitedomain/static/media'
else:
STATIC_URL = '/static/'
MEDIA_URL='static/media/'
STATIC_ROOT=os.path.join(BASE_DIR,'static')
MEDIA_ROOT=os.path.join(BASE_DIR,'static/media/')
提供媒体文件的简单文章在这里您可以阅读它,只有两个简单的步骤: Article Link
感谢社区!
这对我帮助很大
settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
INSTALLED_APPS = [
'django.contrib.staticfiles',
'whitenoise.runserver_nostatic',
]
在 url.py 中导入 URL 并提供静态和媒体文件 URL
from django.views.static import serve
from django.conf.urls import url