13

我目前有两种文件静态文件和媒体文件。静态文件包含我的 css、js 和其他静态内容。媒体文件包含用户上传的内容。静态文件夹就在媒体文件夹旁边。现在在我部署的机器上。如果我设置DEBUG = False我的静态文件就可以了,但是我的媒体内容永远不会显示。我得到一个404 not found错误。我的问题是当 DEBUG = False 时如何在生产环境中显示媒体内容。使用 DEBUG=True 一切似乎都可以正常工作?我阅读了以下页面并尝试了这些东西。

1-尝试为静态媒体创建一个单独的文件夹,就像静态内容一样。 目前我的静态内容由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.

4

8 回答 8

21

在您的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}),

它对我有用:)

于 2018-04-08T20:53:40.297 回答
10

你不应该使用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,您必须配置 Apache来提供媒体文件。

于 2017-06-14T22:24:24.350 回答
8

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

例如_

nginx/sites-available并添加这个

location /media/ { root */home/myprojectdir/myproject*; } 
于 2019-12-16T09:29:30.980 回答
4

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

location /media/ {
    root FULL_PATH_TO_APP; 
}

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

于 2020-05-02T20:06:30.983 回答
3

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

网址
/静态/
/媒体/

目录路径

/home/taukir707/myblog/静态

/home/taukir707/myblog/媒体

于 2020-06-02T18:57:23.380 回答
0

提供媒体文件的简单文章在这里你可以阅读它,只有两个简单的步骤: 文章链接

谢谢,社区!

于 2022-02-02T05:07:10.650 回答
0

这对我有很大帮助

设置.py

STATIC_URL = '/静态/'

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

MEDIA_URL = '/媒体/'

MEDIA_ROOT = os.path.join(BASE_DIR, "媒体")

STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

安装应用程序 = [

'django.contrib.staticfiles',

'whitenoise.runserver_nostatic',

]

在 url.py 中导入

url 并给出静态和媒体文件 url

从 django.views.static 导入服务

从 django.conf.urls 导入 url

于 2022-02-06T08:55:55.070 回答
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/')
于 2021-04-21T11:26:47.113 回答