Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Создание PDF документа(пример из учебника) [RSS Feed]

#1 Фев. 11, 2011 11:35:31

alezhal
От:
Зарегистрирован: 2010-12-22
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание PDF документа(пример из учебника)

Доброго времени суток!
Помогите, пожалуйста, разобраться с этим примером.
Мне нужно было добавить в 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'),
)



Отредактировано (Фев. 11, 2011 12:13:12)

Офлайн

#2 Фев. 11, 2011 12:05:56

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание PDF документа(пример из учебника)

Во-первых, у тебя походу ошибка тут:

from reportlab.lib import sytles # не sytles, наверное, а styles
тогда становится понятна и вторая ошибка - ты пытаешься обратиться к styles как к словарю ( styles ) , а это модуль.



Офлайн

#3 Фев. 11, 2011 12:26:05

alezhal
От:
Зарегистрирован: 2010-12-22
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание PDF документа(пример из учебника)

Enchantner
Во-первых, у тебя походу ошибка тут:
from reportlab.lib import sytles # не sytles, наверное, а styles
тогда становится понятна и вторая ошибка - ты пытаешься обратиться к styles как к словарю ( styles ) , а это модуль.
Спасибо за ответ. Это моя описка на форуме, т.к. текст печатал, а не вставлял. Уже отредактировал.
Но вторая ошибка. Не понимаю, почему к словарю?



Офлайн

#4 Фев. 11, 2011 12:57:58

alezhal
От:
Зарегистрирован: 2010-12-22
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание PDF документа(пример из учебника)

Просмотрел модуль из reportlab.lib styles
Добавил строку: styles = getSampleStyleSheet()
Ошибка исчезла. Генерируется pdf файл, но испорченный.



Офлайн

#5 Фев. 11, 2011 13:33:29

alezhal
От:
Зарегистрирован: 2010-12-22
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание PDF документа(пример из учебника)

Маленькая победа. Работает. Но пока вывод цикла for не тот, что нужен.

Добавил строку:

from reportlab.lib.styles import getSampleStyleSheet
И изменил
doc = SimpleDocTemplate("product.pdf")
на:
doc = SimpleDocTemplate(filename=response)



Офлайн

#6 Фев. 11, 2011 13:53:52

alezhal
От:
Зарегистрирован: 2010-12-22
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание PDF документа(пример из учебника)

Теперь полная победа.

Убрал один цикл и в оставшийся добавил:

p2 = Paragraph("%s" % product.description, style)
Catalog.append(p2)
Может быть кому-нибудь поможет.



Офлайн

#7 Фев. 11, 2011 14:10:29

alezhal
От:
Зарегистрирован: 2010-12-22
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание PDF документа(пример из учебника)

Это конечный вариант(рабочий) :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



Офлайн

  • Начало
  • » Django
  • » Создание PDF документа(пример из учебника)[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version