Проблемы с mod_python

51 views
Skip to first unread message

Zodiak

unread,
Nov 4, 2009, 4:15:45 AM11/4/09
to Django russian
Здравствуйте, господа.
Ситуация такая: пишу диплом и хостинг предоставляет университет,
другие варианты не обсуждаются. В процессе разработки мне надо будет
периодически обновлять код на сервере, чтобы показать научному
руководителю и будующим пользователям. Ну и само собой может найтись
ошибка, которую нужно будет быстро исправить и показать что все
заработало.
ОДНАКО чтобы изменения вступили в силу надо перезапустить апач. Куда
меня пошлют админы Вы можете сами догадаться. Идеальным вариантом было
бы чтобы apache или mod_python сами определяли что проект изменился,
но этого не происходит. Фича mod_python`а
http://modpython.org/live/current/doc-html/dir-other-par.html нифига
не работает.
Есть у кого нибудь идеи по этому поводу?

Dmitry Shevchenko

unread,
Nov 4, 2009, 4:18:05 AM11/4/09
to django-...@googlegroups.com
это не работает :)
либо руками запускать девсервер, либо делать под простой cgi

2009/11/4 Zodiak <desz...@gmail.com>:

--
Best regards, Dmitry Shevchenko.

Alexander Slesarev

unread,
Nov 4, 2009, 4:20:47 AM11/4/09
to django-...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Zodiak wrote:
> Есть у кого нибудь идеи по этому поводу?

Наши эксперименты показали, что и использование mod_python и wsgi
требуют перезапуска апача при изменении кода. Как альтернативу можно
предложить запускать ./manage.py runserver в режиме демона
(http://nuald.blogspot.com/2008/08/daemonize-script.html) на
каком-нибудь порту, а в апаче прописать редирект на этот порт. Или
вообще так и работать с сайтом в обход апача.

- --
Best regards, Alexander Slesarev.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkrxR2kACgkQRIkdfm47DXNPnQCcCTGMBCHrFiElttY5f3+2s5c2
514An2teJ741yL53XKT21SzNXGL6AJ0z
=cWpk
-----END PGP SIGNATURE-----

Phil Kulin

unread,
Nov 4, 2009, 4:20:52 AM11/4/09
to django-...@googlegroups.com
4 ноября 2009 г. 12:15 пользователь Zodiak <desz...@gmail.com> написал:

> Есть у кого нибудь идеи по этому поводу?

Это тот самый случай, когда "другой вариант не обсуждается" именно то
что требуется по задаче. Есть поставленная задача, есть инструменты.
Исходя из существующих инструментов задача решена быть не может.

--
Non nobis Domine non nobis sed Nomini Tuo da gloriam
Phil Kulin

Mikhail Gusarov

unread,
Nov 4, 2009, 4:22:01 AM11/4/09
to django-...@googlegroups.com

Twas brillig at 01:15:45 04.11.2009 UTC-08 when desz...@gmail.com did gyre and gimble:

Z> Есть у кого нибудь идеи по этому поводу?

Попросить админов поставить mod_wsgi.

--
http://fossarchy.blogspot.com/

Alexander Pugachev

unread,
Nov 4, 2009, 4:27:07 AM11/4/09
to django-...@googlegroups.com
Если я ничего не путаю, то эта фича таки работала. Но мне приходилось удалять все файлы .pyc, относящиеся к исходникам проекта. Шарлатанство, но можно было обходиться без перезапуска. Я не гарантирую, что это у вас заработает, но можно попробовать.

4 ноября 2009 г. 11:15 пользователь Zodiak <desz...@gmail.com> написал:

Oleg Kravchenko

unread,
Nov 4, 2009, 4:42:13 AM11/4/09
to django-...@googlegroups.com
Проще всего будет с mod-fastcgi, если хотите сами рестартить сервер,
возможно он уже установлен.
Либо остается runserver, как уже сказали.

Zodiak

unread,
Nov 4, 2009, 8:29:05 AM11/4/09
to Django russian
On 4 ноя, 12:27, Alexander Pugachev <alexander.pugac...@gmail.com>
wrote:

> Если я ничего не путаю, то эта фича таки работала. Но мне приходилось
> удалять все файлы .pyc, относящиеся к исходникам проекта. Шарлатанство, но
> можно было обходиться без перезапуска. Я не гарантирую, что это у вас
> заработает, но можно попробовать.

пробовал, не работает, а ведь это решило бы мою проблему. если у Вы
знаете как это сделать (доп. настройки виртуалхоста или еще что),
поделитесь пожалуйста

а по поводу того что задачу нельзя решить данными средствами - ответ
не принимается. Если не Django, то прийдется писать на php - на языке
который я не перевариваю с тех пор как узнал питон

Dmitry Shevchenko

unread,
Nov 4, 2009, 8:30:23 AM11/4/09
to django-...@googlegroups.com
решайте с хостингом на mod_wsgi, уверен что нужные люди и магарыч все
уладят :)

Stanislav Panasik

unread,
Nov 4, 2009, 8:40:17 AM11/4/09
to django-...@googlegroups.com
FastCGI (mod_fastcgi) имхо решение вопроса. Амины должны разрешить вход
в шелл для рестарта FastCGI-приложения. Приложение будет работать под
учёткой юзера. Неужели админы настолько суровы, что не дадут учётки и
запустить 1 процесс ? :-)

Mikhail Kashkin

unread,
Nov 4, 2009, 9:10:59 AM11/4/09
to django-...@googlegroups.com
Напиши на python'е прокси который будет забирать данные с другой
машины :)


--
Mikhail Kashkin
http://www.devcult.ru/
http://www.mediavirus.ru/

Антон Морозов

unread,
Nov 4, 2009, 9:14:56 AM11/4/09
to django-...@googlegroups.com

Alexander Pugachev

unread,
Nov 4, 2009, 10:05:53 AM11/4/09
to django-...@googlegroups.com
Да ничего там военного не было. Как в доках джанги рекомендуют, так и было, только с этой самой директивой on. Давно было, точнее ничего не скажу.

Судя по этому сниппету я не один такой хитровыдуманный - не представляю, зачем еще .pyc удалять.


4 ноября 2009 г. 15:29 пользователь Zodiak <desz...@gmail.com> написал:

Zodiak

unread,
Nov 4, 2009, 10:22:11 AM11/4/09
to Django russian
On 4 ноя, 17:14, Антон Морозов <moro...@jino.ru> wrote:
> PythonAutoReload On не пробовали?

Пробовал - не помогает. Эта опция кстати включена по умолчанию.
mod_wsgi под виндой поставить не получилось (нет версии для py2.5) -
буду ставить под убунтой
а отдельную учетку могут и не дать.

George Regentov

unread,
Nov 11, 2009, 11:00:03 AM11/11/09
to django-...@googlegroups.com
попробуй сделать через .htaccess

там прописать примерно следующее

    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE lib_mirea.settings
    PythonOption django.root /
    PythonDebug On
    PythonPath "['/home/webadmin/lib_mirea'] + sys.path"

и при обращении на веб сервер будет запускаться скрипт заново

4 ноября 2009 г. 18:22 пользователь Zodiak <desz...@gmail.com> написал:

Шкарупа Алексей

unread,
Nov 11, 2009, 1:46:17 PM11/11/09
to django-...@googlegroups.com
идея интересная, но не сработало. кстати это просто идея или у Вас это работало?

11 ноября 2009 г. 19:00 пользователь George Regentov
<george....@gmail.com> написал:

George Regentov

unread,
Nov 15, 2009, 6:15:44 AM11/15/09
to django-...@googlegroups.com
У меня это работает.
Признаю что не очень красиво, но работает...

11 ноября 2009 г. 21:46 пользователь Шкарупа Алексей <desz...@gmail.com> написал:

taipovm

unread,
Nov 27, 2009, 3:55:15 AM11/27/09
to Django russian
Если что вот тут http://community.livejournal.com/ru_django/46364.html
было обсуждение поднятия python на хостинге, решился использованием
mod_wsgi при этом перезапускать после изменений не надо, я к тому чтоб
попросить админов поставить mod_wsgi
Так и удаление всех *.pyc тоже веть просто одна команда по сути
find ./ -iname '*.pyc' -delete или это почему не подходит?

On 15 ноя, 14:15, George Regentov <george.regen...@gmail.com> wrote:
> У меня это работает.
> Признаю что не очень красиво, но работает...
>
> 11 ноября 2009 г. 21:46 пользователь Шкарупа Алексей

> <deszod...@gmail.com>написал:


>
> > идея интересная, но не сработало. кстати это просто идея или у Вас это
> > работало?
>
> > 11 ноября 2009 г. 19:00 пользователь George Regentov

> > <george.regen...@gmail.com> написал:


> >  > попробуй сделать через .htaccess
>
> > > там прописать примерно следующее
>
> > >     SetHandler python-program
> > >     PythonHandler django.core.handlers.modpython
> > >     SetEnv DJANGO_SETTINGS_MODULE lib_mirea.settings
> > >     PythonOption django.root /
> > >     PythonDebug On
> > >     PythonPath "['/home/webadmin/lib_mirea'] + sys.path"
>
> > > и при обращении на веб сервер будет запускаться скрипт заново
>

> > > 4 ноября 2009 г. 18:22 пользователь Zodiak <deszod...@gmail.com>

Serge Matveenko

unread,
Nov 27, 2009, 5:10:09 AM11/27/09
to django-...@googlegroups.com
> при этом перезапускать после изменений не надо

кстати, это не всегда полезно, ибо не получается выполнить такой юзкейс:
1. обновили файлы. структура БД новая, но пока всё работает
2. изменили структуру БД. если структура поменялась не сильно
(например, добавились новые поля), опять всё работает
3. ткнули touch-ем socket fcgi. запустились обновленные файлы. теперь
всё совсем работает


--
Serge Matveenko
moikrug:http://slki.ru/1
linkedin:http://slki.ru/1f
friendfeed:http://slki.ru/t
jabber:se...@matveenko.ru

Беланчук Павел

unread,
Nov 27, 2009, 6:54:57 AM11/27/09
to django-...@googlegroups.com
Пишу проект для распечатки документов, состоящий из двух приложений: Cправочники(Directories) и Документы(Documents). В документах два класса: Платежное поручение(Payment) и Счет(Invoice). В справочниках классов много: Организация(Contractor), Реквизиты(Account), Сотрудники(Personal), Продукты(Product) ну и т.д., остальные на суть не влияют..
Понятно то, что я импортирую из Справочников(Directories) все классы в Документы(Documents), ибо Документы зависимы от Справочников.. Но, для того чтоб мне добавить ProductInline в Счет(Invoice) мне надо импортировать Продукты(directories.product) в Счет(documents.invoice).
Что именно при этом происходит, мне не понятно (зацикливание или еще ченить мне неизвесное..), но подобная схема приводит к ошибке:

Environment:

Request Method: GET
Request URL: http://localhost:8000/admin/documents/product/
Django Version: 1.1.2 pre-alpha
Python Version: 2.5.4
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.admin',
 'documents',
 'directories',
 'django_extensions']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware')


Traceback:
File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response
  90.                         request.path_info)
File "/usr/lib/python2.5/site-packages/django/core/urlresolvers.py" in resolve
  220.             for pattern in self.url_patterns:
File "/usr/lib/python2.5/site-packages/django/core/urlresolvers.py" in _get_url_patterns
  249.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/lib/python2.5/site-packages/django/core/urlresolvers.py" in _get_urlconf_module
  244.             self._urlconf_module = import_module(self.urlconf_name)
File "/usr/lib/python2.5/site-packages/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "/home/user/AnyDoc/anydoc/../anydoc/urls.py" in <module>
  4. admin.autodiscover()
File "/usr/lib/python2.5/site-packages/django/contrib/admin/__init__.py" in autodiscover
  56.         import_module("%s.admin" % app)
File "/usr/lib/python2.5/site-packages/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "/home/user/AnyDoc/anydoc/documents/admin.py" in <module>
  3. from documents.models import *
File "/home/user/AnyDoc/anydoc/documents/models.py" in <module>
  5. from directories.models import Contractor, KBK, OKATO, Unit, Product
File "/home/user/AnyDoc/anydoc/directories/models.py" in <module>
  4. from documents.models import Invoice

Exception Type: ImportError at /admin/documents/product/
Exception Value: cannot import name Invoice

Единственное решение до которого я дошел, это перенести класс Product в documents.. при такой схеме все работает, но считаю, что надо не только быстро и безопасно ехать, но и шашечки должны быть черные и на желтом фоне.. :)

Диаграммы классов обоих состояний по ссылкам:
http://s50.radikal.ru/i129/0911/6a/639b798ada40.png - Product в documents.
http://i082.radikal.ru/0911/6e/5f5bd97679e6.png - ошибка импортирования.

p.s. Продолжаю писать проект из одного приложения.. :)
-- 
С уважением,
Беланчук Павел
Исполнительный директор
ООО "Свободные решения"
+7-906-826-97-47
Почта: b...@spo.tyumen.ru
Сайт: spo.tyumen.ru

Mikhail Gusarov

unread,
Nov 27, 2009, 6:24:36 AM11/27/09
to django-...@googlegroups.com

Twas brillig at 16:54:57 27.11.2009 UTC+05 when bela...@bk.ru did gyre and gimble:

БП> Единственное решение до которого я дошел, это перенести класс
БП> Product в documents.. при такой схеме все работает, но считаю, что
БП> надо не только быстро и безопасно ехать, но и шашечки должны быть
БП> черные и на желтом фоне.. :)

Классическое решение - перенести Products в третий модуль, от которого
будут зависеть другие два.

--
http://fossarchy.blogspot.com/

Serge Matveenko

unread,
Nov 27, 2009, 6:33:50 AM11/27/09
to django-...@googlegroups.com
> Пишу проект для распечатки документов, состоящий из двух приложений:
> Cправочники(Directories) и Документы(Documents). В документах два класса:
> Платежное поручение(Payment) и Счет(Invoice). В справочниках классов много:
> Организация(Contractor), Реквизиты(Account), Сотрудники(Personal),
> Продукты(Product) ну и т.д., остальные на суть не влияют..
> Понятно то, что я импортирую из Справочников(Directories) все классы в
> Документы(Documents), ибо Документы зависимы от Справочников.. Но, для того
> чтоб мне добавить ProductInline в Счет(Invoice) мне надо импортировать
> Продукты(directories.product) в Счет(documents.invoice).

А вы админ-классы в models.py кладете?

Dmitry Shevchenko

unread,
Nov 27, 2009, 6:35:54 AM11/27/09
to django-...@googlegroups.com
Если импорт нужен только для указания связей, юзайте строку 'app.Model'

2009/11/27 Беланчук Павел <bela...@bk.ru>:

--
Best regards, Dmitry Shevchenko.

Беланчук Павел

unread,
Nov 27, 2009, 7:55:04 AM11/27/09
to django-...@googlegroups.com
27.11.2009 16:24, Mikhail Gusarov пишет:
Как вариант неплох.. только это то же самое, что и перенос Продуктов в
Документы и объединение классов в одно приложение.. не хуже и не лучше..
хотя кода, как и файлов прибавится..

Беланчук Павел

unread,
Nov 27, 2009, 7:49:20 AM11/27/09
to django-...@googlegroups.com
27.11.2009 16:33, Serge Matveenko пишет:

> А вы админ-классы в models.py кладете?
>
>
Нет, в admin.py

Беланчук Павел

unread,
Nov 27, 2009, 7:51:39 AM11/27/09
to django-...@googlegroups.com
27.11.2009 16:35, Dmitry Shevchenko пишет:

> Если импорт нужен только для указания связей, юзайте строку 'app.Model'
>
>
А можно поподробнее..? Я, так сказать, для личного скилла Джангу юзаю.. :)

Yuri Baburov

unread,
Nov 27, 2009, 7:23:22 AM11/27/09
to django-...@googlegroups.com
пиши
ForeignKey('directories.Products')
вместо
ForeignKey(Products)
а для циклических связей внутри одного модуля можно юзать
ForeignKey('Products'), без имени приложения.

2009/11/27 Беланчук Павел <bela...@bk.ru>:

--
Best regards, Yuri V. Baburov, ICQ# 99934676, Skype: yuri.baburov,
MSN: bu...@live.com

Mikhail Kashkin

unread,
Nov 27, 2009, 7:25:23 AM11/27/09
to django-...@googlegroups.com
Классический случай который ставят в пример динамического языка. Надо
импорт делать не в начале модуля, а в том месте где он используется.

http://app-engine.tumblr.com/ - Блог об App Engine

Ilia Kharin

unread,
Nov 27, 2009, 7:28:36 AM11/27/09
to django-...@googlegroups.com
Да, но тогда сложнее найти проблему, ведь модуль импортируется по мере надобности, и ошибка может проявиться именно в этот момент.

27 ноября 2009 г. 15:25 пользователь Mikhail Kashkin <mkas...@gmail.com> написал:

Беланчук Павел

unread,
Nov 27, 2009, 8:35:29 AM11/27/09
to django-...@googlegroups.com
27.11.2009 17:23, Yuri Baburov пишет:

> пиши
> ForeignKey('directories.Products')
> вместо
> ForeignKey(Products)
> а для циклических связей внутри одного модуля можно юзать
> ForeignKey('Products'), без имени приложения.
>
Работает! :)
Правда пришлось добавить related_name.. :)
Это решение из разряда: и шашечки и ехать.. :)
Сеньк! Вопрос решен! :)

Беланчук Павел

unread,
Nov 27, 2009, 8:37:49 AM11/27/09
to django-...@googlegroups.com
27.11.2009 17:23, Yuri Baburov пишет:
> пиши
> ForeignKey('directories.Products')
> вместо
> ForeignKey(Products)
> а для циклических связей внутри одного модуля можно юзать
> ForeignKey('Products'), без имени приложения.
>
Хотя работает и без related_name.. :)

Беланчук Павел

unread,
Nov 27, 2009, 8:55:39 AM11/27/09
to django-...@googlegroups.com
После написания полной модели предстоит генерировать документы и отчеты.
С форматами еще не определился, но это будет что-то из конечного списка:
.pdf, .doc, .odt, .xls, .rtf. Больше склоняюсь к .pdf, .odt, .doc, в
порядке перечисления.
Хочу спросить кто че юзает и почему..?

Yuri Baburov

unread,
Nov 27, 2009, 8:52:07 AM11/27/09
to django-...@googlegroups.com
плиз не надо бессмысленного оффтопика. ты сегодня какой-то агрессивный.

2009/11/27 Mikhail Kashkin <mkas...@gmail.com>:

--

Stanislav Panasik

unread,
Nov 27, 2009, 11:11:56 AM11/27/09
to django-...@googlegroups.com
Привет, Павел!

> После написания полной модели предстоит генерировать документы и отчеты.
> С форматами еще не определился, но это будет что-то из конечного списка:
> .pdf, .doc, .odt, .xls, .rtf. Больше склоняюсь к .pdf, .odt, .doc, в
> порядке перечисления.
> Хочу спросить кто че юзает и почему..?

Если надо именно сразу .pdf, .odt, .doc из одного шаблона, то appy.
http://appyframework.org/
Конечно, там свои заморочки, но другого не знаю, чтоб всё указанное умело.

Ещё есть reportlab, но он не умеет ничего кроме pdf по-моему.

С уважением, Стас


Беланчук Павел

unread,
Nov 27, 2009, 11:40:34 PM11/27/09
to django-...@googlegroups.com
http://s42.radikal.ru/i096/0911/25/bb8a2a4d5acd.png
Есть Invoice(Счет), у которого есть Contractor(Контрагент), у которого
есть несколько Accounts(Банковские счета).
Надо при добавлении Invoice выбрать сперва Contractor а затем один из
его Accounts.
Такое возможно реализовать с помощью штатных средств Джанги?

Yuri Baburov

unread,
Nov 27, 2009, 11:39:25 PM11/27/09
to django-...@googlegroups.com
А зачем это "сперва контрактор"?
Пусть выбирают Account, а у него на сохранении берётся parentContractor.
А показываются в виде ajax-поиска пары Контрактор / Account

Ну или есть другой вариант. Называется chained select boxes.
Например, это: http://github.com/digi604/django-smart-selects

2009/11/28 Беланчук Павел <bela...@bk.ru>:

--

Беланчук Павел

unread,
Nov 28, 2009, 7:14:11 AM11/28/09
to django-...@googlegroups.com
28.11.2009 09:39, Yuri Baburov пишет:

> А зачем это "сперва контрактор"?
> Пусть выбирают Account, а у него на сохранении берётся parentContractor.
> А показываются в виде ajax-поиска пары Контрактор / Account
>
>
Может быть слишком большой выбор.

> Ну или есть другой вариант. Называется chained select boxes.
> Например, это: http://github.com/digi604/django-smart-selects
>
Спасибо, работает замечательно если Contractor один.
Но у меня в Invoice два Contractor: Покупатель(Buyer) и
Продавец(Seller), у которых есть Accounts(ac_seller и ac_buyer).
По требованим Smart-Select(SS) в Accounts должно быть поле
ForeighKey(FK) с ссылкой на Contractor с тем же именем поля, которое в
Invoice из которого у нас этот FK, т.к. у меня их два (seller и buyer)
мне пришлось делать два поля FK из Accounts в Contractor.
Вся эта каша, что удивительно, работает так как надо, с одной оговоркой:
если в Accaunts поля buyer и seller содержат FK на один и тотже Contractor.
http://s03.radikal.ru/i176/0911/7a/25db06683d81.png

Yuri Baburov

unread,
Nov 28, 2009, 8:44:56 AM11/28/09
to django-...@googlegroups.com
2009/11/28 Беланчук Павел <bela...@bk.ru>:

>
> 28.11.2009 09:39, Yuri Baburov пишет:
>>
>> А зачем это "сперва контрактор"?
>> Пусть выбирают Account, а у него на сохранении берётся parentContractor.
>> А показываются в виде ajax-поиска пары Контрактор / Account
>>
>>
>
> Может быть слишком большой выбор.
>>
>> Ну или есть другой вариант. Называется chained select boxes.
>> Например, это: http://github.com/digi604/django-smart-selects
>>
>
> Спасибо, работает замечательно если Contractor один.
> Но у меня в Invoice два Contractor: Покупатель(Buyer) и Продавец(Seller), у
> которых есть Accounts(ac_seller и ac_buyer).
> По требованим Smart-Select(SS) в Accounts должно быть поле ForeighKey(FK) с
> ссылкой на Contractor с тем же именем поля, которое в Invoice из которого у
> нас этот FK, т.к. у меня их два (seller и buyer) мне пришлось делать два
> поля FK из Accounts в Contractor.
> Вся эта каша, что удивительно, работает так как надо, с одной оговоркой:
> если в Accaunts поля buyer и seller содержат FK на один и тотже Contractor.
> http://s03.radikal.ru/i176/0911/7a/25db06683d81.png

хм, видимо, надо пропатчить Smart-selects.
думаю, это будет несложно. просто добавить опцию, чтобы указывать
поле, с которым SS работает.
я бы даже попробовал это сделать сегодня или завтра, просто как
интересную задачку, если ты мне дашь часть твоего кода и какой-нибудь
fixture с данными для удобства. адрес bur...@gmail.com

Шкарупа Алексей

unread,
Nov 28, 2009, 10:59:36 AM11/28/09
to django-...@googlegroups.com
> .pdf, .doc, .odt, .xls, .rtf.
сам столкнулся недавно с той же проблемой.
1) Для pdf что-то было описано в djangobook
2) После некоторых изысканий понял что сгенерировать .doc в джанго
невозможно, т.к. он имеет бинарный формат. единственный вариант это
создать шаблон в ворде, сохранить его как html, а потом стандартной
системой шаблонизации в нужные места воткнуть данные. когда отдаем
файл пользователю указываем что это .doc. узкое место здесь с
картинками - надо подумать как быть с ними.
3) .odt - это упакованный зипом xml. может даже есть готовые проги, но
в любом случае написать свою при необходимости большого труда не
составит.
4) .xls - думаю будет та же конитель что и с .doc
5) и тут мы приходим к самому на мой взгляд реалистичному варианту,
поскольку для .rtf я нашел прогу PyRTF. На этом у меня закончилось
время на изыскания. Попробовать я ее не успел. Если Вы соберетесь и
попробуете с ней работать, пожалуйста опишите ощущения.

Mikhail Gusarov

unread,
Nov 28, 2009, 11:03:08 AM11/28/09
to django-...@googlegroups.com

Twas brillig at 18:59:36 28.11.2009 UTC+03 when desz...@gmail.com did
gyre and gimble:

ША> 2) После некоторых изысканий понял что сгенерировать .doc в джанго
ША> невозможно, т.к. он имеет бинарный формат.

Бредятина какая.

ША> 3) .odt - это упакованный зипом xml. может даже есть готовые проги, но
ША> в любом случае написать свою при необходимости большого труда не
ША> составит.

Закат солнца вручную.

ША> 4) .xls - думаю будет та же конитель что и с .doc

Аналогичная бредятина.

ША> 5) и тут мы приходим к самому на мой взгляд реалистичному варианту,
ША> поскольку для .rtf я нашел прогу PyRTF. На этом у меня закончилось
ША> время на изыскания. Попробовать я ее не успел. Если Вы соберетесь и
ША> попробуете с ней работать, пожалуйста опишите ощущения.

http://pypi.python.org/

--
http://fossarchy.blogspot.com/

Шкарупа Алексей

unread,
Nov 28, 2009, 11:23:34 AM11/28/09
to django-...@googlegroups.com
> Бредятина какая.
> Закат солнца вручную.

Вы сначала предложите свои варианты, а уж потом бросайтесь такими словами.
Ссылки на используемые вами приложения будут более вескими доводами
чем ссылка на страницу поиска

Mikhail Gusarov

unread,
Nov 28, 2009, 11:24:35 AM11/28/09
to django-...@googlegroups.com

Twas brillig at 19:23:34 28.11.2009 UTC+03 when desz...@gmail.com did gyre and gimble:

>> Бредятина какая.
>> Закат солнца вручную.

ША> Вы сначала предложите свои варианты, а уж потом бросайтесь такими
ША> словами. Ссылки на используемые вами приложения будут более
ША> вескими доводами чем ссылка на страницу поиска

sapienti sat

--
http://fossarchy.blogspot.com/

Nikolay Panov

unread,
Nov 28, 2009, 11:47:47 AM11/28/09
to django-...@googlegroups.com
Я бы всё же посоветовал пройти по ссылке и поискать там да хоть тот же
xls. Вот уж с генерацией чего в питоне обычно нет сложностей.

Have a nice day,
Nikolay.

2009/11/28 Шкарупа Алексей <desz...@gmail.com>:

Шкарупа Алексей

unread,
Nov 28, 2009, 12:00:35 PM11/28/09
to django-...@googlegroups.com
> тот же xls
меня не очень то интересует. а вот сгенерировать .doc средствами
Python и Django без установленного на сервере OpenOffice или MS Word я
не нашел, а искал не один день. выражусь по-другому: прецеденты в
студию, пожалуйста!

TI_Eugene

unread,
Nov 28, 2009, 12:56:22 PM11/28/09
to Django russian
On 28 ноя, 18:59, Шкарупа Алексей <deszod...@gmail.com> wrote:
> > .pdf, .doc, .odt, .xls, .rtf.
Я бы предложил:
* pdf - через trml2pdf (у меня работает отлично) - работа, как с
обычным шаблоном.
* odt - ну, прямо юзать uno - секас тот еще... я бы опять предложил
развернуть его zip и работать как с шаблоном (зипуя при выдаче в odt/
ods).
* rtf - возможно, то же решение.
* xls, doc - без каментов. Как вариант - xlsx и docx - как шаблоны.
Универсальный вариант - docbook (опять как шаблон) - и дальше - во что
угодно.
Но это уже не секас, а немецкое кино будет - там с кириллицей надо
танцевать специальным образом.

Беланчук Павел

unread,
Nov 28, 2009, 8:11:01 PM11/28/09
to django-...@googlegroups.com
28.11.2009 18:44, Yuri Baburov пишет:

> хм, видимо, надо пропатчить Smart-selects.
> думаю, это будет несложно. просто добавить опцию, чтобы указывать
> поле, с которым SS работает.
> я бы даже попробовал это сделать сегодня или завтра, просто как
> интересную задачку, если ты мне дашь часть твоего кода и какой-нибудь
> fixture с данными для удобства. адрес bur...@gmail.com
>
Архив ушёл на почту. Смотри AnyDoc2.
Описываю текущую ситуацию:
1) При добавлении Банковского счета(Accounts;
http://localhost:8000/admin/directories/accounts/add/ ) надо указывать в
два поля (КонтрагентСеллер и КонтрагентБайер) одинакового Contractor
(вопрос: что будет если указать разных контрагентов - не
рассматривается). Я думал пойти по пути костылей: сперва с помощью
directories.admin.AccountsAdmin выпилить одно поле из админки (что и
сделал с помощью fields, но перед отправкой архива закомментировал)
затем написать функцию записывающую во второе поле то же, что и в
первое. В directories.admin.AccountsInline пришлось вставить строчку:
fk_name = 'seller', без нее джанга ругалась, что у Accounts более одного
поля FK в Contractor.
2) При добавлении Контрагента (Contractor;
http://localhost:8000/admin/directories/contractor/add/ ) в полях ввода
есть раздел: Банковские счета, добавленный с помощью
directories.admin.AccountsInline, в котором есть строка fk_name =
'seller', которая добавляет к этому разделу поле КонтрагентБайер, или
контрагентСеллер если строка fk_name = 'buyer'.
Хотелось бы видеть при добавлении Банковского счета одно поле
контрагента, и при добавлении Контрагента не видеть
КонтрагентСеллер(Байер) в разделе Банковские счета.

Vasiliy Demin

unread,
Nov 29, 2009, 6:18:11 PM11/29/09
to django-...@googlegroups.com
http://pypi.python.org/pypi/xlwt - использовал для генерации xls,
возможно что-то подобное есть и для doc.
довольно удобная штука.

29 ноября 2009 г. 3:56 пользователь TI_Eugene <ti.e...@gmail.com> написал:

Yuri Baburov

unread,
Nov 30, 2009, 8:41:37 AM11/30/09
to django-...@googlegroups.com
разобрались. оказывается, надо внимательнее читать доки по ChainedForeignKey.
вполне можно делать несколько пар из FK и ChainedFK в одной модели.

2009/11/29 Беланчук Павел <bela...@bk.ru>:

--

Беланчук Павел

unread,
Nov 30, 2009, 12:44:46 PM11/30/09
to django-...@googlegroups.com
30.11.2009 18:41, Yuri Baburov пишет:

> разобрались. оказывается, надо внимательнее читать доки по ChainedForeignKey.
> вполне можно делать несколько пар из FK и ChainedFK в одной модели.
>
>
В связи с чем, приношу искреннюю благодарность Юрию.

Беланчук Павел

unread,
Dec 4, 2009, 2:49:17 PM12/4/09
to django-...@googlegroups.com
28.11.2009 22:56, TI_Eugene пишет:
После плясок с бубном вокруг костра выяснилось следующее:
Для генерации pdf хорошо подойдет ReporlLab, описание работы:
http://djbook.ru/ch11s03.html Но учитывая сложность составления шаблона,
этот вариант был отложен. Работа с trml2pdf встала из-за отсутствия в
АльтЛинукс работоспособного пакета trmltools. Но углубление в тему rml
выявило не менее сложный процесс разработки шаблона чем с pdf.
Для генерации odt можно использовать appy: http://appyframework.org/
Простота составления шаблона делает этот вариант достойным, но учитывая
необходимость использования OO и этот вариант был отложен. Uno юзать
даже не пробывал, ибо секс предпочитаю сугубо гетеросексуальный.. :)
Принцип работы с zip мною не понят и не использован. (буду премного
благодарен за раскрытие этой темы)
C rtf история такая: в OO редактируем шаблон, вставляя в него теги и
сохраняем. Далее открываем его в консольном редакторе, раскомментирываем
фигурные скобки, т.е. при сохранении из OO "{{" превратились в "\{\{",
снова сохраняем. Подставляем шаблон Джанге: получаем кривую кодировку..
вариант отложен.
Успех был получен с xml. Популярность формата, простое составление
шаблона, три срочки кода, отсутствие плясок с кодировкой и
дополнительными приложениями заставили меня остановится именно на этом
варианте.

TI_Eugene

unread,
Dec 4, 2009, 3:56:10 PM12/4/09
to Django russian
> После плясок с бубном вокруг костра выяснилось следующее:
> Для генерации pdf хорошо подойдет ReporlLab, описание работы:http://djbook.ru/ch11s03.htmlНо учитывая сложность составления шаблона,
> этот вариант был отложен.

Я дико прошу прощения, но Вы какие-то феерические вещи говорите...
Ничего лично - просто свои пять вставлю:
Мне было простое задание - с Птн. до Пнд. обеспечить печать (скажем)
"лицензий" на БСО (бланках строгой отчетности).
Там не то что красиво - а с точностью до миллиметра.
Я пообещал, что к Пнд. 10:00 всё будет готово.
Для себя нарисовал план - Сб и пол-Вск изучаю экстрим, вечер Вск - как
прийдется (крайний случай - ReportLab).
Т.к. ленив - искал нечто, что можно обработать а-ля шаблон.
Прошедши всё - docbook, tex, latex, uno, html+css, html2pdf... Всё
оказалось страшно трудоемко.
Ну и вот, как всегда - на мягких лапах - подкрался дедлайн... Вск,
вечер, ничего нет...
Быстрое чтение манов ReportLab показало, что ну его в баню. Зашивать в
код точное позиционирование...
Поиск дал rml2pdf, потом - trml2pdf.
Пакет собирается на 1-2-3. Единственный нюанс - пришлось патчить
(добавить 3 строки), чтобы он различал перемежающиеся шаблоны.
Результат - кое-как сляпаный шаблон ушел заказчику, мальчику на
ресепшине за 5 минут было обяснено, где крутить координаты и размер
шрифта - и до свидания. Дальше заказчик раскрашивал свой шаблон по
вкусу. Пять минут.

> Работа с trml2pdf встала из-за отсутствия в
> АльтЛинукс работоспособного пакета trmltools. Но углубление в тему rml
> выявило не менее сложный процесс разработки шаблона чем с pdf.

Рекомендация - обратитесь к мейнтейнеру пакета trml AltLinux и
попытайтесь убедить доделать работу.
Если не поможет - я подниму в виртуалке Альт, вспомню былое и соберу
работающий пакет - но - за деньги, пардон (время...).

> Для генерации odt можно использовать appy:http://appyframework.org/
> Простота составления шаблона делает этот вариант достойным, но учитывая
> необходимость использования OO и этот вариант был отложен. Uno юзать
> даже не пробывал, ибо секс предпочитаю сугубо гетеросексуальный.. :)

Там, судя по всему, всегда надо поднимать "кагбэ" OOo-server - меня
это тоже очень смутило.
Особенно потому, что OOo требует X, а на сервере X нет и никогда не
будет.

> Принцип работы с zip мною не понят и не использован. (буду премного
> благодарен за раскрытие этой темы)

1. Распаковать ods/odt, как zip - в пачку файлов.
2. главный файл обработать, как шаблон (там просто в клеточках надо
проставить {{ ... }})
3. и по выдаче - запаковать в zip и выдать клеэнту как ods/odt.
Я сам не пробовал (задачи такой не было) - но теории это не
противоречит.

> C rtf история такая: в OO редактируем шаблон, вставляя в него теги и
> сохраняем. Далее открываем его в консольном редакторе, раскомментирываем
> фигурные скобки, т.е. при сохранении из OO "{{" превратились в "\{\{",
> снова сохраняем. Подставляем шаблон Джанге: получаем кривую кодировку..
> вариант отложен.

Если честно - проще нарисовать html и импортировать в OOo Writer...
Я так на 1С (под wine) сделал генерацию договоров о поставке.
Глупо, тупо, но - быстро. И работает.

> Успех был получен с xml. Популярность формата, простое составление
> шаблона, три срочки кода, отсутствие плясок с кодировкой и
> дополнительными приложениями заставили меня остановится именно на этом
> варианте.

Тут - no comments.
Мало информации.
XML - не формат для печати, IMHO.
Имеется в виду сферический XML в вакууме. А не odt/docbook/rml (это
всё - тоже xml).

PS. Насчет плясок с кодировками - всё спереди... :-)

Беланчук Павел

unread,
Dec 4, 2009, 5:30:07 PM12/4/09
to django-...@googlegroups.com

> ресепшине за 5 минут было обяснено, где крутить координаты и размер
> шрифта - и до свидания. Дальше заказчик раскрашивал свой шаблон по
> вкусу. Пять минут.
>
Рисовать линии и определять координаты текста для платежного поручения
эта та еще задачка.. А если учесть, что надо еще ...дцать видов отчетов
прикрутить? Тут может во лбу ченить вырасти..

> Рекомендация - обратитесь к мейнтейнеру пакета trml AltLinux и
> попытайтесь убедить доделать работу.
> Если не поможет - я подниму в виртуалке Альт, вспомню былое и соберу
> работающий пакет - но - за деньги, пардон (время...).
>
Репорт на багзиллу альта уже отправлен.. я не тороплюсь.. За предложение
спасибо.. :)

> 1. Распаковать ods/odt, как zip - в пачку файлов.
> 2. главный файл обработать, как шаблон (там просто в клеточках надо
> проставить {{ ... }})
> 3. и по выдаче - запаковать в zip и выдать клеэнту как ods/odt.
> Я сам не пробовал (задачи такой не было) - но теории это не
> противоречит.
>
Путь очерчен, попробую заюзать, спасибо.

> Если честно - проще нарисовать html и импортировать в OOo Writer...
> Я так на 1С (под wine) сделал генерацию договоров о поставке.
> Глупо, тупо, но - быстро. И работает.
Т.е. вы для 1с подставили .odt?

> Тут - no comments.
> Мало информации.
> XML - не формат для печати, IMHO.
> Имеется в виду сферический XML в вакууме. А не odt/docbook/rml (это
> всё - тоже xml).
>
Я взял готовый документ платежного поручения в формате .xls и средствами
OO импортировал его в Microsoft 2003 XML, проставил переменные и.. profit!
Кратчайший путь к поставленной задаче. имхо. (но это я еще zip с odf не
юзал, чую, что там тоже все просто)

> PS. Насчет плясок с кодировками - всё спереди... :-)
Ага, а как оглянешься: уже все сзади.. :)

Беланчук Павел

unread,
Dec 4, 2009, 6:07:26 PM12/4/09
to django-...@googlegroups.com
Могу подвести результаты..
Если необходимо выдавать:
1. обычный текстовый документ, отлично подходит метод zip/odt, с легким
созданием шаблона.
2. обычный табличный документ, отлично подойдет MS 2003 XML, с легким
созданием шаблона.
3а. документ pdf, подойдет ReportLab, с танцами по созданию шаблона.
3б. документ pdf, подойдет trml2pdf, с танцами по созданию шаблона.
4. любой документ, подойдет appy, с легким созданием шаблона, с
необходимостью запуска OO под X-ы.

TI_Eugene

unread,
Dec 4, 2009, 5:10:21 PM12/4/09
to Django russian
> Рисовать линии и определять координаты текста для платежного поручения
> эта та еще задачка.. А если учесть, что надо еще ...дцать видов отчетов
> прикрутить? Тут может во лбу ченить вырасти..

Вы думаете - вашему серверу приснятся эти отчеты?
Отнюдь...

> Путь очерчен, попробую заюзать, спасибо.

Не за что, спасибо в кроват не положишь (с) - хорошо бы
багрепорт... :-)

> Т.е. вы для 1с подставили .odt?

Нет.
Я в 1С в обработке генерю Текст, выгружаю в файл *.html и вызываю
oowriter с этим файлом.
Точнее - батник (shник) с вызовом oowriter с этим файлом (это просто
нюансы wine).
Всё очень тупо.

> Я взял готовый документ платежного поручения в формате .xls и средствами
> OO импортировал его в Microsoft 2003 XML, проставил переменные и.. profit!
> Кратчайший путь к поставленной задаче. имхо.

Если платежка - одна - то да.
Если одна в день - тоже вариант (хотя через месяц задолбает).
А если не одна в день... и не только платежка...
Бабы Вас съедят - к бабке не ходи.

> (но это я еще zip с odf не юзал, чую, что там тоже все просто)

я думаю, что просто, но это - просто костыль.
Красивый, простой, но - костыль.
Это - не живет.

Беланчук Павел

unread,
Dec 4, 2009, 6:23:45 PM12/4/09
to django-...@googlegroups.com
05.12.2009 03:10, TI_Eugene пишет:

> Вы думаете - вашему серверу приснятся эти отчеты?
> Отнюдь...
>
Дело не во сне сервера, дело в трудоемкости создания шаблонов.

> Не за что, спасибо в кроват не положишь (с) - хорошо бы
> багрепорт... :-)
>
Очень даже легко и просто! Аналог моего пути с xml.

> Нет.
> Я в 1С в обработке генерю Текст, выгружаю в файл *.html и вызываю
> oowriter с этим файлом.
> Точнее - батник (shник) с вызовом oowriter с этим файлом (это просто
> нюансы wine).
> Всё очень тупо.
Нечто схожее с подходом appy

> Если платежка - одна - то да.
> Если одна в день - тоже вариант (хотя через месяц задолбает).
> А если не одна в день... и не только платежка...
> Бабы Вас съедят - к бабке не ходи.
>
Твоя моя не понимай.. Вы, что, думаете я каждую сгенерированную платежку
доставлять лично по адресу буду?
p.s. -"я тебя съем" мне говорили многие "бабы".. :)

> я думаю, что просто, но это - просто костыль.
> Красивый, простой, но - костыль.
> Это - не живет.
Да ну.. Как раз простые и красивые костыли живут дольше всех.. :)

Stanislav Panasik

unread,
Dec 5, 2009, 2:38:35 AM12/5/09
to django-...@googlegroups.com
> необходимостью запуска OO под X-ы.

xvfb вполне достаточно.


Garanin Michael

unread,
Dec 5, 2009, 7:02:37 AM12/5/09
to django-...@googlegroups.com
Всем привет!
1) если документ потенциально многостраничный и должен быть доступен
юзеру для корректировки: RTF (например отчёты, типа списков сотрудников).
2) если документ одностраничный, не требуется корректировка юзером, при
этом есть графическая хрень всякая: SVG. (например почтовый бланк).
Firefox его и отображает и печатает. на IE7 не пробовали.

и там и там подготовка шблонов проста: в нужные места вставляли метки
"%FIO%".
а в python-коде делали обычный строковый "replace". вообщем идея понятная.

Viktor Shulika

unread,
Dec 29, 2009, 4:03:07 AM12/29/09
to django-...@googlegroups.com
для генерации XLS использую xlwt http://pypi.python.org/pypi/xlwt 
для RTF — rtfng http://code.google.com/p/pyrtf-ng/
успешно генерятся таблицы, нет проблем с кодировками, вот пример http://www.veditour.ru/countries/chehiya/tours/12-2009/samara/praga-i-karlovyi-varyi-na-novyij-god-6/ там две иконки XLS и RTF есть некоторые сложности в rtfng с роу/кол спанами у таблиц но вопрос решаемый.
с xlwt — все ОК


2009/11/28 TI_Eugene <ti.e...@gmail.com>
Reply all
Reply to author
Forward
0 new messages