我正在尝试在我的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编译动态媒体文件代码的过程中提供了一些帮助,但现在却被卡住了。
答案 0 :(得分:0)
确认您已加载'os.environ'模块...尝试执行 生产服务器上面的代码。
import os print(os.environ.get('MEDIA_ROOT'))
确保它显示预期的路径。
然后确保您的'urls.py'和'Views.py'在文件顶部显示'import os'行。祝你好运!