Django:模板标记无法加载 image.Only 读取媒体图像
Django: Template Tag unable to load image.Only reading media image
我正在尝试使用 django pisa 模块生成 PDF。
views.py
def reportPdf(template_src, context_dict):
template = get_template(template_src)
context = Context(context_dict)
htmlRender = template.render(context)
resultObj = StringIO.StringIO()
pdfObject = pisa.pisaDocument(StringIO.StringIO(htmlRender.encode(
'utf-8')), resultObj,link_callback=fetch_resources)
response = HttpResponse(resultObj.getvalue(), content_type = 'application/pdf')
response["Content-Disposition"] = 'inline;filename=sample.PDF'
return response
def fetch_resources(uri, rel):
import project.settings
path = os.path.join(project.settings.MEDIA_ROOT, uri.replace(
project.settings.MEDIA_URL, ""))
return path
class abc():
def get(self,request, *args, **kwargs):
// some code
return reportPdf('pdf.djhtml',{'pagesize': 'A4',"refer_data":detail}
settings.py:
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.realpath(os.path.join(PROJECT_PATH, "media"))
MEDIA_URL = '/media/'
模板:
pdf.djhtml:
媒体文件夹中可用图像的代码:
<img src="/media/sample.jpg"/>
以上工作正常,因为我在 views.py
中合并了媒体
但是下面的代码没有加载图像。
refer_data.image.url = http://www.w3schools.com/images/w3schools_green.jpg
(将此 http url 视为测试示例)。这张图片 url 我是从 API 电话中收到的。
{% if refer_data.image.url != "" %}
<img src="{{refer_data.image.url}}"/>
{% else %}
<img src="noimage.png"/>
{% endif %}
有人可以分析并分享我遗漏的一些想法吗?
任何帮助将不胜感激。
您可以在 fetch_resources
中检查您处理的是本地还是绝对 HTTP URL,一个使用 validator 包的示例:
import project.settings
import validators
def fetch_resources(uri, rel):
if validators.url(uri):
return uri
else:
path = os.path.join(project.settings.MEDIA_ROOT, uri.replace(
project.settings.MEDIA_URL, ""))
return path
对于绝对 url (http://www.google.com
) return url else 对于相对 url /media/myimage.jpg
它 returns 加入的媒体路径。
我正在尝试使用 django pisa 模块生成 PDF。
views.py
def reportPdf(template_src, context_dict):
template = get_template(template_src)
context = Context(context_dict)
htmlRender = template.render(context)
resultObj = StringIO.StringIO()
pdfObject = pisa.pisaDocument(StringIO.StringIO(htmlRender.encode(
'utf-8')), resultObj,link_callback=fetch_resources)
response = HttpResponse(resultObj.getvalue(), content_type = 'application/pdf')
response["Content-Disposition"] = 'inline;filename=sample.PDF'
return response
def fetch_resources(uri, rel):
import project.settings
path = os.path.join(project.settings.MEDIA_ROOT, uri.replace(
project.settings.MEDIA_URL, ""))
return path
class abc():
def get(self,request, *args, **kwargs):
// some code
return reportPdf('pdf.djhtml',{'pagesize': 'A4',"refer_data":detail}
settings.py:
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.realpath(os.path.join(PROJECT_PATH, "media"))
MEDIA_URL = '/media/'
模板:
pdf.djhtml: 媒体文件夹中可用图像的代码:
<img src="/media/sample.jpg"/>
以上工作正常,因为我在 views.py
中合并了媒体但是下面的代码没有加载图像。
refer_data.image.url = http://www.w3schools.com/images/w3schools_green.jpg
(将此 http url 视为测试示例)。这张图片 url 我是从 API 电话中收到的。
{% if refer_data.image.url != "" %}
<img src="{{refer_data.image.url}}"/>
{% else %}
<img src="noimage.png"/>
{% endif %}
有人可以分析并分享我遗漏的一些想法吗? 任何帮助将不胜感激。
您可以在 fetch_resources
中检查您处理的是本地还是绝对 HTTP URL,一个使用 validator 包的示例:
import project.settings
import validators
def fetch_resources(uri, rel):
if validators.url(uri):
return uri
else:
path = os.path.join(project.settings.MEDIA_ROOT, uri.replace(
project.settings.MEDIA_URL, ""))
return path
对于绝对 url (http://www.google.com
) return url else 对于相对 url /media/myimage.jpg
它 returns 加入的媒体路径。