Существует несколько способов создания изображений из диаграммы. js диаграмма из Python.
Используйте toBase64Image из диаграммы. js API для создания изображения вашего графика и отправки его на ваш сервер по электронной почте. Это решение требует, чтобы клиент загружал каждую диаграмму перед ее отправкой по электронной почте (невозможно только в Django).
Используйте pyppeteer , a Python драйвер для Puppeteer , который является браузером без подключения к компьютеру. В этом случае вы можете загрузить свою страницу, содержащую диаграмму, а затем сделать снимок экрана:
browser = await launch()
page = await browser.newPage()
await page.goto('http://example.com/path/to/chart')
await page.screenshot({'path': 'chart.png'})
await browser.close()
Это должно работать нормально, но это несколько тяжеловесное решение, требующее локального рендеринга. на веб-сервере, если вы не настроили некоторую рабочую инфраструктуру.
Используйте веб-сервис, например
QuickChart , чтобы обработать для вас рендеринг (обратите внимание, что это я создал, но он
с открытым исходным кодом и может размещаться самостоятельно). Это работает, когда вы берете конфигурацию Chart. js и отправляете ее в веб-службу:
import json
from urllib.parse import quote
import requests
# Set up the chart.js config. This can either be a string or python dict.
chart_config = {
'type': 'bar',
'data': {
'labels': ['Week 1', 'Week 2', 'Week 3', 'Week 4'],
'datasets': [{
'label': 'Retweets',
'data': [12, 5, 40, 5]
}, {
'label': 'Likes',
'data': [80, 42, 215, 30]
}]
}
}))
# Convert the python dict to a string and URL-encode it
encoded_config = quote(json.dumps(chart_config))
# Download chart
chart_url = f'https://quickchart.io/chart?c={encoded_config}'
f = requests.get(chart_url, stream=True)
if r.status_code == 200:
with open('/tmp/chart.png', 'wb') as f:
for chunk in r:
f.write(chunk)
Существует также Python клиент , который вы можете использовать.