Найти - Пользователи
Полная версия: Создание PDF документа(пример из учебника)
Начало » Django » Создание PDF документа(пример из учебника)
1
alezhal
Доброго времени суток!
Помогите, пожалуйста, разобраться с этим примером.
Мне нужно было добавить в views.py код из учебника. И дописать адрес в urls.py. Вот, что получилось.
Но у меня, естественно, не работает.
Выдает ошибку:
'module' object is unsubscriptable, в коде отмечена.



Есть views.py
from django.http import HttpResponse
from ecomerce_book.product.models import Product
from reportlab.platypus.doctemplate import SimpleDocTemplate
from reportlab.platypus import Paragraph, Spacer
from reportlab.lib import styles

def product_pdf(request):
response = HttpResponse(mimetype='application/pdf')
response[Content-Disposition'] = 'attachment; filename=product.pdf'



doc = SimpleDocTemplate("products.pdf")
Catalog = []
header = Paragraph("Product Inventory", styles['Heading1']) <---Ошибка в этой строке !!!!!!!!!
Catalog.append(header)
style = styles['Normal']
for product in Product.objects.all():
for product in Product.objects.all():
p = Paragraph("%s" % product.name, style)
Catalog.append(p)
s = Spacer(1, 0.25*inch)
Catalog.append(s)
doc.build(Catalog)



return response
И urls.py
urlpatterns = pattern('',
url(r'^product_pdf', 'ecomerce_book.product.views.product_pdf'),
)
Enchantner
Во-первых, у тебя походу ошибка тут:
from reportlab.lib import sytles # не sytles, наверное, а styles
тогда становится понятна и вторая ошибка - ты пытаешься обратиться к styles как к словарю ( styles ) , а это модуль.
alezhal
Enchantner
Во-первых, у тебя походу ошибка тут:
from reportlab.lib import sytles # не sytles, наверное, а styles
тогда становится понятна и вторая ошибка - ты пытаешься обратиться к styles как к словарю ( styles ) , а это модуль.
Спасибо за ответ. Это моя описка на форуме, т.к. текст печатал, а не вставлял. Уже отредактировал.
Но вторая ошибка. Не понимаю, почему к словарю?
alezhal
Просмотрел модуль из reportlab.lib styles
Добавил строку: styles = getSampleStyleSheet()
Ошибка исчезла. Генерируется pdf файл, но испорченный.
alezhal
Маленькая победа. Работает. Но пока вывод цикла for не тот, что нужен.

Добавил строку:
from reportlab.lib.styles import getSampleStyleSheet
И изменил
doc = SimpleDocTemplate("product.pdf")
на:
doc = SimpleDocTemplate(filename=response)
alezhal
Теперь полная победа.

Убрал один цикл и в оставшийся добавил:
p2 = Paragraph("%s" % product.description, style)
Catalog.append(p2)
Может быть кому-нибудь поможет.
alezhal
Это конечный вариант(рабочий) :cool:

from django.http import HttpResponse
from ecomerce_book.product.models import Product
from reportlab.platypus.doctemplate import SimpleDocTemplate
from reportlab.platypus import Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib import styles
from cStringIO import StringIO


def product_pdf(request):
response = HttpResponse(mimetype='application/pdf')
response[Content-Disposition'] = 'attachment; filename=product.pdf'
temp = StringIO()
doc = SimpleDocTemplate(temp)
Catalog = []
styles = getSampleStyleSheet()
header = Paragraph("Product Inventory", styles['Heading1'])
Catalog.append(header)
style = styles['Normal']
for product in Product.objects.all():
p1 = Paragraph("%s" % product.name, style)
p2 = Paragraph("%s" % product.description, style)
Catalog.append(p1)
Catalog.append(p2)
s = Spacer(1, 0.25*inch)
Catalog.append(s)
doc.build(Catalog)
response.write(temp.getvalue())
temp.close()
return response
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB