Python 如何显示来自s3的图像?

Python 如何显示来自s3的图像?,python,django,Python,Django,我正在完成django生成pdf证书的应用程序 在我将它引入heroke并设置S3Amazom来托管静态文件之前,它工作得非常好。 我有一个带有证书模板的html,并通过HTML2PDF将其呈现为pdf。但是它不是通过css显示背景,它只是在标签中工作 奇怪的是,如果我们在s3 amazom中打开图像url,它会完美地显示出来 这里是模板css部分 <meta charset="utf-8" /> {% load static %} &

我正在完成django生成pdf证书的应用程序 在我将它引入heroke并设置S3Amazom来托管静态文件之前,它工作得非常好。 我有一个带有证书模板的html,并通过HTML2PDF将其呈现为pdf。但是它不是通过css显示背景,它只是在标签中工作

奇怪的是,如果我们在s3 amazom中打开图像url,它会完美地显示出来

这里是模板css部分

        <meta charset="utf-8" />
        {% load static %}
        <style type="text/css">
                @page {
                    size: 1122.52px 1587.4px ;
                    /*size: A4 landscape;*/
                    margin: 0cm;
                    background-image: url({{bg_front}});
                    height: 1588;
                }
        </style>

{%load static%}
@页面{
尺寸:1122.52px1587.4px;
/*大小:A4景观*/
边距:0厘米;
背景图片:url({{bg_front}});
身高:1588;
}
我的看法是:

class ViewPDF(View):

def get(self, request, *args, **kwargs):
    data = {}
    pdf = True
    if kwargs['pk']:
        try:                    
            participant = Participant.objects.get(pk=kwargs['pk'])
            print(participant.cpf)
            if participant.name:
                certificate = Certificate.objects.get(pk=participant.certificate.pk)

                pathBack = str(certificate.template.template_back.url)

                pathFront = str(certificate.template.template_front.url)
                print(pathFront)
                #
                # CONFIGURA OS BACKGROUNDS E TEXTO
                #
                data['bg_front'] = pathFront
                data['bg_back'] = pathBack
                setting = certificate.template.settings         
                start_date = datetime.strftime(certificate.start_date,'%d/%m/%Y')
                end_date = datetime.strftime(certificate.start_date,'%d/%m/%Y')
                data['text_front'] = setting.replace('<<nome>>',participant.name).replace('<<cpf>>',str(participant.cpf)).replace('<<ch>>',str(certificate.ch)).replace('<<instituicao>>',str(certificate.institution)).replace('<<DataInicio>>',start_date).replace('<<DataFim>>',end_date)
                data['cpf'] = participant.cpf
            pdf = render_to_pdf('app_certificates/body_front_pdf.html', data)
            return HttpResponse(pdf, content_type='application/pdf')
except TypeError as e:
    return HttpResponse(e)
类视图PDF(视图):
def get(自我、请求、*args、**kwargs):
数据={}
pdf=真
如果kwargs['pk']:
尝试:
participant=participant.objects.get(pk=kwargs['pk'])
打印(参与者.cpf)
如果参与者名称:
certificate=certificate.objects.get(pk=participant.certificate.pk)
pathBack=str(certificate.template.template\u back.url)
pathFront=str(certificate.template.template\u front.url)
打印(pathFront)
#
#配置操作系统背景和文本
#
数据['bg_front']=pathFront
数据['bg_back']=pathBack
设置=certificate.template.settings
开始日期=datetime.strftime(证书.开始日期,'%d/%m/%Y'))
结束日期=日期时间.strftime(证书.开始日期,'%d/%m/%Y'))
数据['text\u front']=设置。替换('',参与者。名称)。替换('',str(参与者。cpf))。替换('',str(certificate.ch))。替换('',str(证书。机构))。替换('',开始日期)。替换('',结束日期)
数据['cpf']=participant.cpf
pdf=呈现到pdf(“应用程序证书/body\u front\u pdf.html”,数据)
返回HttpResponse(pdf,content\u type='application/pdf')
除类型错误为e外:
返回HttpResponse(e)

您正在打印
pathFront
,它显示了什么?把这个加到你的问题上。还要解释什么是
certificate.template.template\u front
,它是通过文件字段上传的文件吗?如果是,您对
媒体根目录
媒体URL
的设置是什么?另外,打开浏览器调试工具,查看您在那里看到的错误。如果没有显示背景,则会出现404错误。查看错误中的url。pathFront是用户上载的图像的路径。。。现在它在S3 Amazon上certificate.template.template_front是我想要的css backgroundMEDIA_ROOT=os.path.join(BASE_DIR,'app_certificates','media')media_url='/media/'我是否需要更改media_ROOT或其他内容来匹配S3 Amazom???