Django媒体文件在生产时没有显示Debug = False - Django 1.10

时间:2017-06-14 21:41:24

标签: django static media collectstatic

我目前有两种文件静态文件和媒体文件。静态文件包含我的css,js和其他静态内容。媒体文件包含用户上传的内容。静态文件夹就在媒体文件夹旁边。现在在我部署的计算机上。如果我设置了DEBUG = False我的静态文件就好了,但我的媒体内容从未显示过。我收到404 not found错误。 我的问题是当DEBUG = False时如何在生产环境中显示媒体内容。使用DEBUG = True,一切似乎都运行良好?我阅读了以下page并尝试了这些内容。

1-Tried为静态媒体创建一个单独的文件夹,就像静态内容一样。 目前,我的静态内容由collectstatic命令管理。我在webfaction上使用apache。当我运行static_content时,我有一个名为./manage.py collectstatic的静态文件夹,我在静态文件夹中的所有内容都被复制到static_content文件夹。我尝试创建另一个静态文件夹叫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文件夹中?此外,如果我在用户上传数据时将静态文件夹用于管理我的媒体内容,该数据将上传到mediastatic_media

6 个答案:

答案 0 :(得分:6)

您不应将collectstatic用于您的媒体目录。从'/home/admin/webapps/mainfolder/mainapp/media'移除STATICFILES_DIRS,然后设置

MEDIA_ROOT = '/home/admin/webapps/mainfolder/mainapp/media'

完成此操作后,static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)应在DEBUG = True时提供媒体文件。

对于DEBUG = False,您必须configure Apache才能投放媒体文件。

答案 1 :(得分:6)

figBackImage.sd_setImage(with: URL(string: (figure?.backImage)!)) 档案中:

添加此行

urls.py

在urlpatterns中添加这两个网址:

from django.views.static import serve

它对我有用:)

答案 2 :(得分:1)

我在DEBUG=False上遇到过同样的问题。我是通过像这样在服务器块中配置Nginx媒体位置来解决的

location /media/ {
    root FULL_PATH_TO_APP; 
}

FULL_PATH_TO_APP 是我的media文件夹所在目录的完整路径。

答案 3 :(得分:1)

在Pythonanywhere服务器中 只是 添加静态文件 url 目录

URL
/ static /
/ media /

目录路径

/ home / taukir707 / myblog / static

/ home / taukir707 / myblog / media

答案 4 :(得分:0)

如果您使用的是Nginx,请让其提供媒体文件

例如

位置/ media / {根 / home / myprojectdir / myproject ; }

答案 5 :(得分:0)

这是最好的解决方案。将您的媒体文件夹保存在静态文件夹中。并在

中使用此代码 <块引用>

设置.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/')
相关问题