仅在调试打开时提供服务器文件 - Django

时间:2018-05-04 18:50:20

标签: django python-3.x apache

我正在尝试在我的Django服务器上提供动态创建的文件。 代码工作正常,并从我本地服务器上的媒体文件夹提供图像文件。 它也适用于生产服务器中的图像文件,但只有在Prod服务器中将调试设置为True时才会提供。

但是当我在Prod Server中将debug设置为False时,我得到一个找不到文件的错误(在控制台中): GET http://thesitename/media/imgs/img.png 404 (Not Found)

服务器提供/static文件夹中的文件,但不提供/media文件夹中的文件。

我的settings.py看起来像这样:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "frontend/media/")

urls.py看起来像这样:

app_name = 'frontend'
urlpatterns = [ ###urls###
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Views.py看起来像这样:

def template_page(request, loation, par, date):
    ### generating image using pil here ###
    pil_image.save("frontend/media/imgs/img.png”)
    path_to_image_passing_to_template =  “/media/imgs/img.png”
    params = {
        'path_to_image_passing_to_template' : path_to_image_passing_to_template
    }
    return render(request, 'frontend/template_page.html', params)

html看起来像这样:

<img src="{{path_to_image_passing_to_template}}" />

和文件结构是这样的:

/backend 
    urls.py
    views.py
/frontend 
    /static
    /media
        /imgs
    /templates
        /frontend
        urls.py
        views.py
/thesite
    settings.py
    urls.py
    wsgi.py
/static

我不明白为什么它应该在prod服务器中打开调试,而不是!!!

我已经查看过几个问题,但没有找到任何与此类问题相关的查询。我在编写早期answer编译动态媒体文件代码的过程中提供了一些帮助,但现在却被卡住了。

1 个答案:

答案 0 :(得分:0)

确认您已加载'os.environ'模块...尝试执行 生产服务器上面的代码。

import os
print(os.environ.get('MEDIA_ROOT'))

确保它显示预期的路径。

然后确保您的'urls.py'和'Views.py'在文件顶部显示'import os'行。祝你好运!