<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7834466361812067478</id><updated>2011-12-01T08:50:22.179+04:00</updated><category term='apache'/><category term='i18n'/><category term='templates'/><category term='centos'/><category term='tools'/><category term='wizard'/><category term='south'/><category term='видео'/><category term='satchmo'/><category term='debugging'/><category term='php'/><category term='templatetags'/><category term='библиотеки'/><category term='pip'/><category term='deployment'/><category term='pil'/><category term='django-cms'/><category term='l10n'/><category term='github'/><category term='settings'/><category term='dtl'/><category term='django'/><category term='pagination'/><category term='расширения'/><category term='captcha'/><category term='git'/><category term='python'/><category term='многоязычность'/><category term='книги'/><category term='nginx'/><category term='wsgi'/><category term='haskell'/><category term='сравнение'/><category term='drupal'/><category term='windows'/><category term='философия'/><category term='ubuntu'/><title type='text'>Даёшь Django в народные массы!</title><subtitle type='html'>Заметки на полях в процессе изучения Django</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>63</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-8035973781842409215</id><published>2011-04-03T14:56:00.000+04:00</published><updated>2011-04-03T14:56:05.347+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django-cms'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='многоязычность'/><title type='text'>Затычки к django-multilingual-ng</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Из всех "многоязычных" решений на Django самым внятным мне показался &lt;a href="https://github.com/ojii/django-multilingual-ng/"&gt;django-multilingual-ng&lt;/a&gt;, от авторов &lt;a href="http://www.django-cms.org/"&gt;django CMS&lt;/a&gt;. Сама django CMS по смыслу не очень подошла для текущего проекта, поэтому было принято решение сделать своё решение, позаимствовав часть идей из django CMS.&lt;br /&gt;То, что django-multilingual-ng написано под django CMS, к сожалению, дало неприятный косяк в том, что оно "из коробки" не другит с FeinCMS. Причём в тикете автор говорит - используйте лучше django CMS, что довольно странно, если мне нужен всего-лишь UI для редактирования mptt-деревьев.&lt;br /&gt;Понадобилось тут ещё добавить некоторое удобство - чтоб в админке словарики (многоязычные) были по алфавиту отсортированы (в соответствии с текущим языком, конечно).&lt;br /&gt;Поле &lt;a href="http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.ordering"&gt;ordering&lt;/a&gt; для ModelAdmin, естественно, не подходит, ибо переводы лежат в отдельной таблице и поля разные для разных языков получаются.&lt;br /&gt;Поковырявшись в джанге получился вот примерно такой велосипедик:&lt;br /&gt;&lt;pre class="prettyprint"&gt;class NameMultilingualAdmin(MultilingualModelAdmin):&lt;br /&gt;    list_display = ('name',)&lt;br /&gt;&lt;br /&gt;    @gll&lt;br /&gt;    def get_changelist(self, request):&lt;br /&gt;        field = 'name_%s' % GLL.language_code&lt;br /&gt;        from django.contrib.admin.views.main import ChangeList&lt;br /&gt;        &lt;br /&gt;        class NameOrderedChangelist(ChangeList):&lt;br /&gt;            def get_ordering(self):&lt;br /&gt;                return (field, 'asc')&lt;br /&gt;&lt;br /&gt;        return NameOrderedChangelist&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-8035973781842409215?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/8035973781842409215/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2011/04/django-multilingual-ng.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8035973781842409215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8035973781842409215'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2011/04/django-multilingual-ng.html' title='Затычки к django-multilingual-ng'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-2944870368724934026</id><published>2011-03-04T00:47:00.000+03:00</published><updated>2011-03-04T00:47:53.627+03:00</updated><title type='text'>Палка о 2 концах</title><content type='html'>К дифирамбам легкому созданию форков в &lt;a href="http://django-newbie.blogspot.com/2011/02/unicode-rulezz.html"&gt;прошлом посте&lt;/a&gt; надо добавить солидную ложку дёгтя: когда форков становится слишком много и забивают на upstream, то изменения могут разойтись, усложняя или делая вообще маловозможным обмен кодом между форками. Оказалось, просто, что юникод в оригинальном django-filebrowser уже поддерживается в последней версии (причём в выполненном тикете файл с русским именем), а форк без поддержки grappelli сделан заметно ранее и изменения из upstream в него не вливались. В общем, свобода - это хорошо, но лучше чтоб она давалась человеку, который понимает как и зачем ей пользоваться.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-2944870368724934026?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/2944870368724934026/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2011/03/2.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2944870368724934026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2944870368724934026'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2011/03/2.html' title='Палка о 2 концах'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-6379126329621958613</id><published>2011-02-27T01:09:00.000+03:00</published><updated>2011-02-27T01:09:45.841+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='библиотеки'/><category scheme='http://www.blogger.com/atom/ns#' term='расширения'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><title type='text'>Unicode rulezz</title><content type='html'>Вроде всё-таки начал делать более-менее реальный проект на Django, поэтому появляются поводы писать сюда.&lt;br /&gt;Потребовалась работа с файлами (плюс интеграция с tinyMCE), к сожалению, django-filebrowser тянет в зависимостях grappelli, который совсем вроде как не сдался (думаю &lt;a href="https://bitbucket.org/izi/django-admin-tools/wiki/Home"&gt;admin_tools&lt;/a&gt; вполне хватит). Нашёлся форк с "отпиленными" grappelli и uploadify, но загвоздк оказалась в том что он хочет "буквы" в именах файлов, а русские буквы, конечно же, буквами не являются на его взгляд. Чтож, 5 минут и готов по-моему вполне рабочий &lt;a href="https://github.com/qrilka/django-filebrowser-no-grappelli-and-uploadify"&gt;форк&lt;/a&gt;.&lt;br /&gt;Open source и github в частности, по-моему, довольно сильно меняют процесс разработки, причём в лучшую сторону. Обмен кодом/идеями - очень хорошая вещь.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-6379126329621958613?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/6379126329621958613/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2011/02/unicode-rulezz.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6379126329621958613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6379126329621958613'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2011/02/unicode-rulezz.html' title='Unicode rulezz'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-5870842934003038370</id><published>2010-08-25T00:11:00.000+04:00</published><updated>2010-08-25T00:11:43.305+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Об истории джанго</title><content type='html'>Для тех, кто не в курсе - &lt;a href="http://www.quora.com/What-is-the-history-of-the-Django-web-framework"&gt;откуда появился Django&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-5870842934003038370?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/5870842934003038370/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/08/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5870842934003038370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5870842934003038370'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/08/blog-post.html' title='Об истории джанго'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-8713887901848635005</id><published>2010-06-18T13:33:00.000+04:00</published><updated>2010-06-18T13:33:14.482+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pil'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Патчим PIL под Windows</title><content type='html'>Сам я вот уже полтора года сижу на Linux, поэтому проблемы с виндовыми библиотеками как-то меня не особо касались.&lt;br /&gt;Но, не так давно, взялся руководить одним студенческим проектом на Django, предложил на выбор: или ставить линукс (хотяб в виртуалку) или иметь сношения с зависимостями виндовых библиотек. С линуксом не так чтоб здорово, поэтому все выбрали 2-й вариант.&lt;br /&gt;И вроде бы особых проблем не было, если не считать чуть более хитрую настройку всего зоопарка.&lt;br /&gt;Но вот на днях "отвалилась" у них &lt;a href="http://code.google.com/p/django-simple-captcha/"&gt;капча&lt;/a&gt; со словами: "The _imagingft C module is not installed", сами они разобраться не смогли, пришлось мне делать вскрытие.&lt;br /&gt;Оказалось, что товарищи сборщики &lt;a href="http://bitbucket.org/effbot/pil-117/issue/1/windows-build-of-_imagingft-module-fails-to"&gt;прописали левую зависимость&lt;/a&gt; в библиотеку.  Пересобирать как-то совсем было лениво, поэтому просто взял &lt;a href="http://www.angusj.com/resourcehacker/"&gt;Resource Hacker&lt;/a&gt; и вырезал следующий кусок&lt;br /&gt;&lt;pre&gt;  &amp;lt;dependency&gt;&lt;br /&gt;    &amp;lt;dependentAssembly&gt;&lt;br /&gt;      &amp;lt;assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"&gt;&lt;/assemblyIdentity&gt;&lt;br /&gt;    &amp;lt;/dependentAssembly&gt;&lt;br /&gt;  &amp;lt;/dependency&gt;&lt;br /&gt;&lt;/pre&gt;к чёртовой матери из _imagingft.pyd.&lt;br /&gt;&lt;br /&gt;P.S. Обнаружил &lt;a href="http://draft.blogger.com/"&gt;http://draft.blogger.com/&lt;/a&gt;, который более внятно работает с HTML (странно, что по дефолту стоит совсем кривой редактор)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-8713887901848635005?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/8713887901848635005/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/06/pil-windows.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8713887901848635005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8713887901848635005'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/06/pil-windows.html' title='Патчим PIL под Windows'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-7776435738093249795</id><published>2010-06-04T18:28:00.001+04:00</published><updated>2010-06-04T18:28:18.937+04:00</updated><title type='text'>Django In Depth от Джеймса Беннета</title><content type='html'>По-моему, отличнейшая презентация (и почему я на неё только вчера наткнулся?) :&lt;div style="width:425px" id="__ss_3219425"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/ubernostrum/django-in-depth" title="Django In Depth"&gt;Django In Depth&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse3219425" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=django-in-depth-100218132145-phpapp02&amp;stripped_title=django-in-depth" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse3219425" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=django-in-depth-100218132145-phpapp02&amp;stripped_title=django-in-depth" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ubernostrum"&gt;ubernostrum&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-7776435738093249795?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/7776435738093249795/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/06/django-in-depth.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7776435738093249795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7776435738093249795'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/06/django-in-depth.html' title='Django In Depth от Джеймса Беннета'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-5690378253833234951</id><published>2010-04-17T22:22:00.004+04:00</published><updated>2010-04-17T22:33:31.440+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='templates'/><category scheme='http://www.blogger.com/atom/ns#' term='templatetags'/><title type='text'>По следам...</title><content type='html'>Вспомнил, что начинал читать Pro Django, и решил продолжить это дело. И почти сразу нашёл пояснение к &lt;a href="http://django-newbie.blogspot.com/2010/03/blog-post_20.html"&gt;предыдущей проблеме с переменными в блоках DTL&lt;/a&gt;: контекст, передаваемый в шаблоны организован в виде стэка. &lt;br /&gt;Оказалось, что и в официальных джанговских доках это &lt;a href="http://docs.djangoproject.com/en/dev/ref/templates/api/#playing-with-context-objects"&gt;тоже описано&lt;/a&gt;.&lt;br /&gt;P.S. В комментах и в своём блоге alerion &lt;a href="http://alerion.pp.ua/2010/03/context.html"&gt;дал решение&lt;/a&gt; в прошлый раз (но до его блога я не добрался, а приведённый вариант был не до конца понятен).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-5690378253833234951?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/5690378253833234951/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/04/blog-post_17.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5690378253833234951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5690378253833234951'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/04/blog-post_17.html' title='По следам...'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-6819481225250584925</id><published>2010-04-13T23:19:00.002+04:00</published><updated>2010-04-13T23:29:04.454+04:00</updated><title type='text'>Продолжая тему нескольких портов</title><content type='html'>Разбираем дальше &lt;a href="http://django-newbie.blogspot.com/2010/04/nginx.html"&gt;вчерашнюю тему нескольких сайтов на одном хосте&lt;/a&gt;.&lt;br /&gt;Скорее всего вам не помешает, чтобы можно было заходить одновременно в несколько админок на разных сайтах (т.е. разных портах). По умолчанию это не сработает, т.к. куки сессии будет совпадать для обеих сайтов. По-моему логично разрешить проблему при помощи разных SESSION_COOKIE_NAME в файлах настроек.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-6819481225250584925?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/6819481225250584925/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/04/blog-post_13.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6819481225250584925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6819481225250584925'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/04/blog-post_13.html' title='Продолжая тему нескольких портов'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-4820006492377455599</id><published>2010-04-13T00:14:00.002+04:00</published><updated>2010-04-13T00:24:19.758+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='nginx'/><title type='text'>О портах в nginx</title><content type='html'>Потребовалось развернуть 2 разных инстанса сервера на джанго на одном и том же хосте, но на разных портах.&lt;br /&gt;Django крутится в mod_wsgi за nginx.&lt;br /&gt;На первый взгляд всё выглядело нормально, но сюрприз образовался, когда попытался я зайти в админку: после логина следовал редирект на сайт с дефолтным 80-м портом (хотя в админку я залезал по другому порту).&lt;br /&gt;Вскрытие (спустя более часа разбирательств) показало, что во всём виноват проксирующий nginx, в котором была прописана директива "proxy_set_header Host $host:$server_port;". Всё легко разрешилось добавлением порта - "proxy_set_header Host $server_port;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-4820006492377455599?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/4820006492377455599/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/04/nginx.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4820006492377455599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4820006492377455599'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/04/nginx.html' title='О портах в nginx'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-1499810545144303814</id><published>2010-04-11T22:08:00.002+04:00</published><updated>2010-04-11T22:14:52.997+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='pip'/><title type='text'>Pip, о сколько в этом слове...</title><content type='html'>Что-то вот совсем понять не могу в чём проблема и как её диагностировать:&lt;br /&gt;Через fabric создаётся новый virtualenv и в него устанавливаются все зависимости с помощью "pip install -r requirements.txt". Всё вроде бы хорошо, но иногда pip зависает на продолжительное время и весь процесс занимает десятки минут вместо стандартного времени менее минуты.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-1499810545144303814?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/1499810545144303814/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/04/pip.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/1499810545144303814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/1499810545144303814'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/04/pip.html' title='Pip, о сколько в этом слове...'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-743610260859798862</id><published>2010-04-08T19:27:00.000+04:00</published><updated>2010-04-08T19:29:12.040+04:00</updated><title type='text'>И ты, брут?</title><content type='html'>Я был несколько удивлён узнав, что студия, сами знаете кого, тоже &lt;a href="http://www.artlebedev.ru/tools/technogrette/etc/inline-forms/"&gt;использует джанго&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-743610260859798862?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/743610260859798862/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/04/blog-post_08.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/743610260859798862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/743610260859798862'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/04/blog-post_08.html' title='И ты, брут?'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3299715683484305640</id><published>2010-04-03T22:39:00.002+04:00</published><updated>2010-04-03T23:04:45.526+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='pip'/><title type='text'>А мужики-то не знают!</title><content type='html'>&lt;a href="http://stackoverflow.com/questions/529425/easy-install-cache-downloaded-files"&gt;Обнаружил &lt;/a&gt;, что у pip есть опция кэшировать загружаемые пакеты. Для этого надо присвоить переменной окружения $PIP_DOWNLOAD_CACHE папку, где будет располагаться этот кэш.&lt;br /&gt;Забавно, но на оф. сайте pip эта опция фигуриует только в &lt;a href="http://pip.openplans.org/search.html?q=cache"&gt;новостях&lt;/a&gt;.&lt;br /&gt;На самом деле захотелось сделать развёртывание совсем с 0, с созданием virtualenv и не заморачиваясь на исправление зависимостей, но каждый раз скачивать десяток мегабайт по-моему всёж некоторое расточительство, особенно когда состав пакетов менятся довольно редко. Пусть даже и в наше время мегабитных подключений.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3299715683484305640?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3299715683484305640/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/04/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3299715683484305640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3299715683484305640'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/04/blog-post.html' title='А мужики-то не знают!'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3532854106653690995</id><published>2010-03-31T00:08:00.002+04:00</published><updated>2010-03-31T00:41:10.569+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='settings'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><title type='text'>Администрируемые настроечки и github</title><content type='html'>Понадобились тут для приложения настраиваемые настройки в админке (буквально потребовалось сделать редактируемыми адреса для отрпавки определённых формочек). Не желая изобретать свой велосипед, полез в гугл. Там обнаружил с ходу старенький &lt;a href="http://code.google.com/p/django-values/"&gt;django-dbsettings&lt;/a&gt;, который мне показался каким-то не кузявым: проект заброшен (хотя есть &lt;a href="http://github.com/sciyoshi/django-dbsettings/network"&gt;форки на github&lt;/a&gt;) да и с ходу не нашёл там группировки настроек (адреса и сабжи отличаются для разных форм). Следующим оказался совсем свежий &lt;a href="http://github.com/jabapyth/django-appsettings"&gt;django-appsettings&lt;/a&gt;. Вроде бы простое приложение, но я что-то 2 вечера разбирался в (ещё не очень знакомых мне) фокусах с метапрограммированием на python, которые там используются. Всему виной, по-моему, несколько противоречивое README к проекту. Ключевым вопросом стало то, что для подключения настроек для приложения необходимо, чтобы эти настройки были использованы в моделях приложения, т.е. в них должны присутствовать строки:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from appsettings import app&lt;br /&gt;settings = app.settings.your_app&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;которые и вызывают соответствующий autodiscover().&lt;br /&gt;С учётом этого всё стало довольно прозрачно и ясно и группировки вроде на месте, только вот в интерфейсе администрирования их не было у Джареда. Пришлось &lt;a href="http://github.com/qrilka/django-appsettings"&gt;"форкнуть"&lt;/a&gt; проект и реализовать то, что необходимо.&lt;br /&gt;Поставил в итоге ещё один плюсик гиту и понравился github. Правда в последнем обнаружилось пару багов: с коммитом, начинающимся с # он по ходу дела не дружит (в итоге пришлось делать merge из коммандной строки), да ещё на 1-м из флэшевых графов мой Firefox просто "схлопнулся". А в целом очень удобно - возьму себе на вооружение.&lt;br /&gt;P.S. Ещё для настроек есть какое-то решение от авторов &lt;a href="http://www.satchmoproject.com/"&gt;Satchmo&lt;/a&gt;, но смотреть его как-то было уже лень, когда было получено практически рабочее решение.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3532854106653690995?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3532854106653690995/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/03/github.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3532854106653690995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3532854106653690995'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/03/github.html' title='Администрируемые настроечки и github'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3860750343551081135</id><published>2010-03-23T01:20:00.003+03:00</published><updated>2010-03-23T01:27:15.213+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='i18n'/><title type='text'>Работать надо меньше...</title><content type='html'>Минут пятнадцать сидел и "тупил" по поводу того, почему Джанго не хочет переводить строчку, когда локализация к ней написана и скомпилирована. Оказалось, что надо было просто лишь перегрузить девсервер.&lt;br /&gt;Кстати, по поводу &lt;a href="http://django-newbie.blogspot.com/2010/03/blog-post.html"&gt;локализации&lt;/a&gt;: в грядущей версии 1.2 появится новый флажок с говорящим за себя названием - &lt;a href="http://docs.djangoproject.com/en/dev/topics/i18n/localization/#id3"&gt;USE_L10N&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3860750343551081135?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3860750343551081135/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/03/blog-post_23.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3860750343551081135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3860750343551081135'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/03/blog-post_23.html' title='Работать надо меньше...'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-4920922556315443587</id><published>2010-03-20T00:32:00.003+03:00</published><updated>2010-03-20T00:45:44.494+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='templates'/><category scheme='http://www.blogger.com/atom/ns#' term='templatetags'/><category scheme='http://www.blogger.com/atom/ns#' term='dtl'/><title type='text'>Разделяй и не властвуй?</title><content type='html'>Эксперименты показывают (в исходники самой Джанго пока не залезал толком), что Django Template Language имеет один не совсем неочевидный ньюанс: переменные, которые устанавливаются с помощью templatetag'ов в блоках, не "шарятся" между разными блоками. В итоге получается, что их надо устанавливать переменные заново в каждом из блоков, т.е. получаем как минимум лишний вызов, и возможно ещё и совершенно лишний запрос к базе.&lt;br /&gt;Можно, конечно, результаты запроса кэшировать, если есть необходимось, но всё равно дублирование остаётся. С другой стороны, безусловно, установка переменных из шаблона не есть правильный подход, всё должно быть установлено по возможности на уровне view или в middleware. Но вот данные нужны на уровне именно самого шаблона, view находятся, в ныеншнем случае, в django CMS, а шаблоны могут туда передаваться разные, данные же эти нужны лишь в одном из них.&lt;br /&gt;Получается или я что-то реально недопонимаю или всё выглядит немного некрасиво.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-4920922556315443587?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/4920922556315443587/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/03/blog-post_20.html#comment-form' title='Комментарии: 14'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4920922556315443587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4920922556315443587'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/03/blog-post_20.html' title='Разделяй и не властвуй?'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-7937362450843973884</id><published>2010-03-11T22:10:00.002+03:00</published><updated>2010-03-11T22:18:28.350+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='i18n'/><category scheme='http://www.blogger.com/atom/ns#' term='l10n'/><title type='text'>Советская власть и русификация всей страны</title><content type='html'>Обнаружил тут вдруг, что, несмотря на довольно хорошую поддержку интернационализации в Джанго, с локализацией не всё так тривиально, как хотелось бы. По сути надо было решить очень простую задачу - выводить локализованные имена месяцев в архиве новостей (хотя кто знает, что там дальше понадобится ещё). Есть, конечно, datetime.strftime, только вот он пляшет от текущей локали, которая задаётся на весь процесс и не управляется Джанго. В итоге поставил &lt;a href="http://babel.edgewall.org/wiki/BabelDjango"&gt;BabelDjango&lt;/a&gt; и использовал format_date(date, 'LLLL') оттуда.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-7937362450843973884?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/7937362450843973884/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/03/blog-post.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7937362450843973884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7937362450843973884'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/03/blog-post.html' title='Советская власть и русификация всей страны'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-9009864905691062677</id><published>2010-02-19T18:27:00.004+03:00</published><updated>2010-02-20T01:07:48.604+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django-cms'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>О django CMS</title><content type='html'>Планировали тут для одного проекта поднять &lt;a href="http://drupal.org"&gt;Drupal&lt;/a&gt;, потому как основная задача там - CMS. После чтения доков и исходников пришли к выводу, что даже руками на Джанго будет собрать сервер быстрее, плюс необходимые механизмы интеграции требуют достаточной гибкости. Готовые фичи "из коробки" - это, конечно, интересно, но хочется иметь возможность манёвра. Ну и примеры кода под друпал, в котором на прямую запросы к таблицам самого друпала делаются, как минимум, смутили. Хотя, безусловно, нехилое сообщество пользвателей и большое число инсталляций может является некоторым плюсом. Но по-моему гораздо удобнее пользоваться инструментом, для которого понимаешь, как он работает, и представляешь варианты того, что надо сделать для реализации нового функционала. Поэтому родилось по-моему логичное решение: в топку PHP.&lt;br /&gt;Писать совсем с нуля CMS было бы несколько грустно, а для джанго они &lt;a href="http://code.djangoproject.com/wiki/CMSAppsComparison"&gt;уже есть&lt;/a&gt;. Правда, не так чтоб их было огромное количество, да и по поводу распространённости/фичам ситуация не так чтоб совсем идеальная, но варианты имеются.&lt;br /&gt;По следам статьи "&lt;a href="http://pydanny.blogspot.com/2009/11/picking-django-powered-cms.html"&gt;Picking a Django powered CMS&lt;/a&gt;" в первую очередь взгляд упал на &lt;a href="http://spinlock.ch/pub/feincms/"&gt;FeinCMS&lt;/a&gt;. Вещь в целом вроде неплохая, но всёже по принципу оно больше похоже на то, что называют (пхпшники в основном) &lt;a href="http://en.wikipedia.org/wiki/Content_Management_Framework"&gt;CMF&lt;/a&gt;, т.е. компоненты надо ещё подгонять нужным образом, чтобы получить саму CMS. Плюс ещё вылез какое-то исключение при создании перевода страницы, причина которого сходу была неясна.&lt;br /&gt;Это заставило всплыть в памяти мысли о &lt;a href="http://www.django-cms.org/"&gt;django CMS&lt;/a&gt;. Поставил, настроил, "натянул" дизайн, посоздавал странички и контент для них и оно мне реально понравилось. Возможно пока я ещё не обнаружил проблемных мест, но на данный момент считаю django CMS довольно хорошим проектом, довольно гибким и удобным. Немного, правда, смущает число тикетов по системе, но реальных шоу-стопперов я не обнаружил.&lt;br /&gt;Надеюсь, что за не очень большое время проект удастся довести до ума и заменить старую неуклюжую пхп-версию на джанговскую, которую можно будет легко и непринуждённо расширять и модифицировать, ну и, надеюсь, что django CMS в этом поможет.&lt;br /&gt;P.S. Рекомендую ещё по этому поводу статью "&lt;a href="http://birdhouse.org/blog/2009/11/11/drupal-or-django/"&gt;Друпал или Джанго&lt;/a&gt;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-9009864905691062677?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/9009864905691062677/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/02/django-cms.html#comment-form' title='Комментарии: 10'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/9009864905691062677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/9009864905691062677'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/02/django-cms.html' title='О django CMS'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-7095324063052148111</id><published>2010-02-19T01:29:00.002+03:00</published><updated>2010-02-19T01:38:32.420+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Очередная находка ньюба</title><content type='html'>Оказывается, что приложение Джанго не может совпадать по имени с именем проекта, причём проявилость это у меня довольно хитрым способом. Дело в том, что понадобилось мне забацать свой templatetag, создал приложение (с совпадающим именем), а Джанга ругается. Чуть потыркался, остановил девелоперский сервер, пытаюсь запустить runserver_plus из &lt;a href="http://code.google.com/p/django-command-extensions/"&gt;django-command-extensions&lt;/a&gt;, а оно мне отвечает: "Не, чувак, нет у тебя этих расширенных комманд, погляди в комманду хелп, убедись". Нормальный же runserver запускается и работает, только вот templatetag, конечно же не находит.&lt;br /&gt;В целом, ещё один урок на тему, что с именами в Питоне надо быть чуть аккуратным.&lt;br /&gt;P.S. И абсолютный импорт тут ничем не поможет.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-7095324063052148111?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/7095324063052148111/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/02/blog-post_19.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7095324063052148111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7095324063052148111'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/02/blog-post_19.html' title='Очередная находка ньюба'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-4176901196506606417</id><published>2010-02-15T00:51:00.004+03:00</published><updated>2010-02-15T10:17:14.860+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='pagination'/><title type='text'>И что они нашли в django-pagination?</title><content type='html'>Куча джангописателей (наприме, включая авторов &lt;a href="http://pinaxproject.com/"&gt;Pinax&lt;/a&gt;) используют &lt;a href="http://code.google.com/p/django-pagination/"&gt;django-pagination&lt;/a&gt;, но по-моему товарищ Эрик выдаёт несколько кривой результат для большого числа страниц. Например страницы могут вылядеть следующим образом:&lt;br /&gt;&lt;span style="color: rgb(204, 255, 255);"&gt;&amp;lt;&amp;lt;previous 1 2&lt;/span&gt; ... &lt;span style="color: rgb(204, 255, 255);"&gt;5 6&lt;/span&gt; &lt;span&gt;7&lt;/span&gt; &lt;span style="color: rgb(204, 255, 255);"&gt;8&lt;/span&gt; ... &lt;span style="color: rgb(204, 255, 255);"&gt;20 21 next&gt;&gt;&lt;/span&gt;&lt;br /&gt;Сразу обращает на себя асимметрия результата, плюс ещё в начале и в конце много страниц отображается.&lt;br /&gt;По-моему гораздо симпатичней (и даже чуточку логичней) вариант&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; &lt;span style="color: rgb(204, 255, 255);"&gt;&amp;lt; Prev 1&lt;/span&gt;&lt;/span&gt; ... &lt;span style="color: rgb(204, 255, 255);"&gt;5 6&lt;/span&gt; &lt;span&gt;7&lt;/span&gt; &lt;span style="color: rgb(204, 255, 255);"&gt;8 9&lt;/span&gt; ... &lt;span style="color: rgb(204, 255, 255);"&gt;21 Next &gt;&lt;/span&gt;&lt;br /&gt;вот &lt;a href="http://www.tummy.com/Community/Articles/django-pagination/"&gt;отсюда&lt;/a&gt;.&lt;br /&gt;P.S. А blogger ужасно хреново работает с угловыми скобками, сил нет.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-4176901196506606417?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/4176901196506606417/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/02/django-pagination.html#comment-form' title='Комментарии: 9'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4176901196506606417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4176901196506606417'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/02/django-pagination.html' title='И что они нашли в django-pagination?'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-2940570420203176203</id><published>2010-02-13T00:59:00.002+03:00</published><updated>2010-02-13T01:21:25.066+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Все аналогии ложны.</title><content type='html'>Размышляя над разницей между подходами и приёмами прниятыми на PHP и в python (в основном я рассматриваю Django, т.к. с другими фреймворками я не очень хорошо знаком), всё чаще в голову приходит аналогия с противопоставлением Windows и Linux. В PHP в основном всё уже готово "из коробки" и та же поддержка апачем особых плясок с конфигами не требует, тогда как с тем же Django приходится разобраться с процессом развёртывания, да и вариантов там сразу целая пачка (если не больше). Ну и самый большой аргумент, на мой взгляд, это модульность и гибкость, которая позволяет на линуксе, джанге достичь больших результатов, но в итоге требует больших усилий головного мозга (как говорят "если в линуксе можно настраивать программу, то вам, скорее всего, её придётся настраивать"). А модульность эта не может строиться без достаточной стройности идеологии и структуры системы (не могу не привести ссылку на &lt;a href="http://django-newbie.blogspot.com/2009/04/blog-post_07.html"&gt;свой прошлый пост про reusable apps&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-2940570420203176203?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/2940570420203176203/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/02/blog-post_13.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2940570420203176203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2940570420203176203'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/02/blog-post_13.html' title='Все аналогии ложны.'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-709860220644160520</id><published>2010-02-05T00:35:00.002+03:00</published><updated>2010-02-05T00:41:43.112+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Зависимости, зависимости...</title><content type='html'>У товарища тут вышла проблема с разворачиванием приложеньица на джанге. Вроде всё сделано нормально, но выдаёт, хоть ты тресни, ошибку импорта, аля "не могу импортировать 'test.settings'", но файл-то лежит рядом и из питона нормально импортируется. Битый час придумывал, откуда могут ноги у этой проблемы расти. Оказалось всё тривиально - в поставке питона идёт модуль test, поэтому возник конфликт пакетов.&lt;br /&gt;Так что называйте папки (и пакеты) внятно!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-709860220644160520?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/709860220644160520/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/02/blog-post.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/709860220644160520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/709860220644160520'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/02/blog-post.html' title='Зависимости, зависимости...'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3927486491639819015</id><published>2010-01-18T00:00:00.002+03:00</published><updated>2010-01-18T00:13:01.621+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='wsgi'/><category scheme='http://www.blogger.com/atom/ns#' term='nginx'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Спасибо русским программистам!</title><content type='html'>Предыдущая &lt;a href="http://django-newbie.blogspot.com/2010/01/wsgi.html"&gt;война с mod_wsgi&lt;/a&gt; закончилась в итоге тем, что Apache был "спрятан" за проксирующий nginx, что решило проблему с "залипающими" запросами. Заодно и статике теперь должна оптимальней отдаваться.&lt;br /&gt;Думал было использовать ещё &lt;a href="http://www.grid.net.ru/nginx/upload.ru.html"&gt;Nginx upload module&lt;/a&gt;, написал даже нужный код (т.к. данные в итоге приходят немного иначе). Однако, по запарке забыл код обновить, а в результате обнаружилось, что оно и без этого замечательно работает. Поэтому оставил пока тот вариант "на всякий пожарный". Хотя толком не помешало бы тесты сделать, чтоб понять, даст ли оно какую-либо разницу.&lt;br /&gt;В любом случае nginx рулит, спасибо Игорю Сысоеву.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3927486491639819015?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3927486491639819015/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/01/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3927486491639819015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3927486491639819015'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/01/blog-post.html' title='Спасибо русским программистам!'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-9159424884303659410</id><published>2010-01-06T13:41:00.002+03:00</published><updated>2010-01-06T13:55:40.591+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='wsgi'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><title type='text'>WSGI...</title><content type='html'>Вот толи я неважный линуксовый админ, толи в связке CentOS+mod_wsgi что-то "нетак":&lt;br /&gt;время от времени Apache "затыкается" и из внешних признаков обнаружились лишь записи с "Premature end of script headers:" для сайта на Django. Причём вчера такое поведение получилось повторить сделав touch одному из wsgi-скриптов, ошибки же повалились для другого сайта, откуда могут тут взяться "наведённые" проблемы совершенно непонятно.&lt;br /&gt;Возможно, надо обновить mod_wsgi с 2.5 до 2.8, или вообще собрать по-нормальному другой сервер (и плюнуть на CentOS), но пока чуть поживём с непонятками.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-9159424884303659410?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/9159424884303659410/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/01/wsgi.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/9159424884303659410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/9159424884303659410'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/01/wsgi.html' title='WSGI...'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-4583997566431792148</id><published>2010-01-05T20:11:00.001+03:00</published><updated>2010-01-05T20:13:31.373+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'></title><content type='html'>&lt;a href="http://github.com/clintecker/django-chunks"&gt;Django-chunks&lt;/a&gt; вроде бы совсем мелочь-мелочью, но для вставки всякой ерунды а-ля баннеры очень даже удобно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-4583997566431792148?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/4583997566431792148/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2010/01/django-chunks.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4583997566431792148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4583997566431792148'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2010/01/django-chunks.html' title=''/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-5649942382912102274</id><published>2009-12-28T00:44:00.002+03:00</published><updated>2009-12-28T01:07:04.207+03:00</updated><title type='text'>Что год уходящий с собой уносит...</title><content type='html'>Планировал в уходящем году разобраться с Джанго, и, думаю, что это мне удалось более или менее. Благо вещь намного проще чем, например, &lt;a href="http://www.impredicative.com/ur/"&gt;Ur&lt;/a&gt;. Правда, основная проблема, что проектов пока на нём почти и нет совсем. Есть, конечно &lt;a href="http://avastep.ru/"&gt;avastep&lt;/a&gt;, но вещь довольно простая, пусть даже и посещаемость есть какая-никакая. Но Джанге там негде особо и проявить-то себя, хотя, видимо, будет допиливаться, в смысле расширения.&lt;br /&gt;Хочется в следущем году попробовать &lt;a href="http://spinlock.ch/pub/feincms/html/"&gt;FeinCMS&lt;/a&gt; взять на вооружение ибо modx уж больно грустная вещь для чего-нибудь чуть в сторону отходящего от стандартного функционала&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-5649942382912102274?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/5649942382912102274/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/12/blog-post_28.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5649942382912102274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5649942382912102274'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/12/blog-post_28.html' title='Что год уходящий с собой уносит...'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-9162701068360811173</id><published>2009-12-14T10:08:00.002+03:00</published><updated>2009-12-14T10:17:12.542+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Толи лыжи не едут...</title><content type='html'>urls.py и именованные ссылки это вроде бы хорошо, но вот никак немогу понять: разве нельзя в этих самых ссылках GET параметры как-то "прикрутить"?&lt;br /&gt;Писать в шаблоне {% url my_link %}?param={{ template_param }} и "вручную" разбирать потом на стороне view-хи как-то кажется несколько заморочным.&lt;br /&gt;А параметры в урлах временные, поэтому логичней иметь их явными параметрами, ну и AdSense не срабатывает там где нужно (наверное каждый раз пересобирает статистику для таргетинга?).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-9162701068360811173?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/9162701068360811173/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/12/blog-post.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/9162701068360811173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/9162701068360811173'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/12/blog-post.html' title='Толи лыжи не едут...'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-735031340589526029</id><published>2009-11-16T09:54:00.002+03:00</published><updated>2009-11-16T10:03:12.786+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='сравнение'/><title type='text'>Яблоки vs. Апельсины</title><content type='html'>Довольно интересное &lt;a href="http://birdhouse.org/blog/2009/11/11/drupal-or-django/"&gt;сравнение Drupal и Django&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-735031340589526029?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/735031340589526029/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/11/vs.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/735031340589526029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/735031340589526029'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/11/vs.html' title='Яблоки vs. Апельсины'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-2187152534289391086</id><published>2009-10-10T20:04:00.001+04:00</published><updated>2009-10-10T20:07:05.663+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>Красиво :)</title><content type='html'>Обновил &lt;a href="http://robhudson.github.com/django-debug-toolbar/"&gt;django-debug-toolbar&lt;/a&gt; до версии 0.8 - вот это я понимаю красивый интерфейс :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-2187152534289391086?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/2187152534289391086/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/10/blog-post.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2187152534289391086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2187152534289391086'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/10/blog-post.html' title='Красиво :)'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-4895792407652056548</id><published>2009-09-26T00:00:00.003+04:00</published><updated>2009-09-26T00:13:42.704+04:00</updated><title type='text'>DjandoCon 2009</title><content type='html'>Для тех, кто ещё не в курсе, пару недель прошла конференция &lt;a href="http://www.djangocon.org/"&gt;DjangoCon&lt;/a&gt; 2009. Видео вроде ещё не выкладывали, &lt;a href="http://djangocon.pbworks.com/Slides"&gt;слайды&lt;/a&gt; уже есть.&lt;br /&gt;Кстати, &lt;a href="http://thisweekindjango.com/"&gt;TWiD&lt;/a&gt; возродился недавно в виде &lt;a href="http://djangodose.com/"&gt;Django Dose&lt;/a&gt;. Пока контента не сильно много, но ждём, что появится позже.&lt;br /&gt;P.S. В связи со сменой работы перспективы вменяемой работы на Django заметно поуменьшились, к сожалению.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-4895792407652056548?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/4895792407652056548/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/09/djandocon-2009.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4895792407652056548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4895792407652056548'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/09/djandocon-2009.html' title='DjandoCon 2009'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-969798687850032322</id><published>2009-09-08T22:44:00.002+04:00</published><updated>2009-09-08T23:39:27.933+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='satchmo'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Go shopping!!!</title><content type='html'>Поковырялся тут с пхпшным oscommerce, много плевался. Проект находится в "подвешенном" состоянии и, вместе с тем, много народу делает разные "доделки", местами противоречащие друг другу. В общем до модульности &lt;a href="http://django-newbie.blogspot.com/2009/04/blog-post_07.html"&gt;Django Apps&lt;/a&gt; далековато.&lt;br /&gt;Ну, думаю, а гляну-ка &lt;a href="http://www.satchmoproject.com/"&gt;Satchmo&lt;/a&gt;, вебшоп на Django. Но первые впечатления не очень обрадовали:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Документация на сайте опирается на версию из HEAD репозитария, так что возникает вопрос со стабильностью.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Установка тянет за собой кучу зависимостей, причём в рекомендациях easy_install и прямое создание ссылок в site-packages, а также выгрузка некоторых вещей также по HEAD из репозитариев (пусть и от участников проекта, насколько я понял)&lt;/li&gt;&lt;li&gt;Урлы подключаются путём добавления магической строчки "&lt;span style="font-style: italic;"&gt;from satchmo_store.urls import urlpatterns&lt;/span&gt;", т.е. ни о какой конфигурируемости речи не идёт.&lt;/li&gt;&lt;li&gt;Многоязычность делается через какие-то "терни к звёздам", в файлах лежит папочка "ru" с переводом, но среди языков по "магическому" адресу /settings нет русского языка, а вот переключение на русский язык, несмотря на это работает. В переводах продуктов же список всех языков, доступных джанге.&lt;/li&gt;&lt;/ol&gt;В общем как-то всё грустно...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-969798687850032322?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/969798687850032322/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/09/go-shopping.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/969798687850032322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/969798687850032322'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/09/go-shopping.html' title='Go shopping!!!'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-2252141862663807806</id><published>2009-08-27T22:55:00.002+04:00</published><updated>2009-08-27T23:23:12.952+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='south'/><title type='text'>А кончил за упокой...</title><content type='html'>Для первого нашего Django-проекта я решил использовать &lt;a href="http://south.aeracode.org/"&gt;South&lt;/a&gt;, чтобы меньше заморачиваться с модификациями БД (например, выполнять их автоматически при деплойменте). Всё здорово, но вот в версии 0.5 была подлая "засада" - South не совсем корректно понимал вариант, когда default для полей задавался через callable. Приходилось ручками править определение поля, создавать миграцию, а потом исправлять поле на первоначальный вариант. Однако вышла версия 0.6 и там это было исправлено. "Здорово" подумал я, но не тут-то было :)&lt;br /&gt;Проблема возникла в обновлении версии пакета, который был поставлен в virtualenv через pip. В документации к pip данный вопрос вообще никак не освещается. Путём гугления обнаружилась опция --upgrade, только вот указывать для файла с зависимостями оказалось неверным вариантом, потому как через зависимости тянулся почему-то злосчастный PIL, некорректно устанавливающийся.&lt;br /&gt;Пришлось делать апгрейд пакета отдельно ручками как&lt;br /&gt;&lt;pre&gt;pip -E . install --upgrade South&lt;br /&gt;&lt;/pre&gt;Но в site-packages остаются "концы" от старой версии 0.5, поэтому их пришлось ручками стереть.&lt;br /&gt;Python, конечно, неплохой язык, но вот всё чаще вспоминаются слова &lt;a href="http://dmzlj.livejournal.com/"&gt;dmz&lt;/a&gt; про package hell, и это далеко не радует.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-2252141862663807806?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/2252141862663807806/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/08/blog-post_27.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2252141862663807806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2252141862663807806'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/08/blog-post_27.html' title='А кончил за упокой...'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-8383755381399042535</id><published>2009-08-26T00:49:00.002+04:00</published><updated>2009-08-26T00:53:31.742+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><title type='text'>Действительно хорошая книга</title><content type='html'>Начал читать &lt;a href="http://prodjango.com/"&gt;ProDjango&lt;/a&gt; и такое ощущение, что из первых 2 глав её я узнал про python больше чем из всей &lt;a href="http://www.diveintopython.org/"&gt;Dive Into Python&lt;/a&gt;. Однозначно оценка 5 книжке!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-8383755381399042535?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/8383755381399042535/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/08/blog-post_26.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8383755381399042535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8383755381399042535'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/08/blog-post_26.html' title='Действительно хорошая книга'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3427530722734946444</id><published>2009-08-22T00:17:00.002+04:00</published><updated>2009-08-22T00:33:07.835+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='i18n'/><title type='text'>Толь лыжи не едут...</title><content type='html'>Понадобилось тут разобраться с интернационализацией в Django, в принципе, вроде всё понятно, но в одном месте вышел "затык". Создаю с помощи комманды файл django.po, компилирую в бинарный формат, запускаю сервер, а там ни намёка на перевод. Наверное не меньше получаса медитировал над документацией и гуглом. Оказалось, что создал я папку &lt;span style="font-style: italic;"&gt;conf/locale&lt;/span&gt;, где ищется локализация самой джанги, а для других проектов нужна просто &lt;span style="font-style: italic;"&gt;locale&lt;/span&gt;. Надо просто внимательней читать то, что пишут инструменты (в сообщении &lt;span style="font-style: italic;"&gt;conf/locale&lt;/span&gt; была просто первой). Хотя такая неоднородность несколько контрастирует c остальными аспектами довольно последовательного Django.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3427530722734946444?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3427530722734946444/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/08/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3427530722734946444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3427530722734946444'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/08/blog-post.html' title='Толь лыжи не едут...'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3700567274130925214</id><published>2009-07-31T16:00:00.002+04:00</published><updated>2009-07-31T16:09:00.939+04:00</updated><title type='text'>Хочу другой линукс!</title><content type='html'>Повоевав с mod_wsgi, вроде приблизился к нормальной разработке, но не тут-то было: не захотел Django имена файлов с русскими буквами воспринимать. Оказалось, что Apache запускался с LANG=C, как это исправить даже в джанговских доках &lt;a href="http://code.djangoproject.com/wiki/django_apache_and_mod_wsgi#AdditionalTweaking"&gt;написано&lt;/a&gt;, но вот CentOS и тут отличился: настраивается не в /etc/apache2/envvars, а в /etc/sysconfig/httpd и даже называется не LANG, а HTTPD_LANG. Ну и после &lt;a href="http://linux.slashdot.org/story/09/07/30/130249/CentOS-Project-Administrator-Goes-AWOL"&gt;последних новостей&lt;/a&gt; есть уже огромный повод задуматься. Но это потом, ведь завтра отпуск начинается :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3700567274130925214?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3700567274130925214/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/07/blog-post_31.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3700567274130925214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3700567274130925214'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/07/blog-post_31.html' title='Хочу другой линукс!'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3089223885326551607</id><published>2009-07-28T23:21:00.003+04:00</published><updated>2009-07-28T23:27:51.256+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><title type='text'>R.I.P. mod_python</title><content type='html'>&lt;a href="http://django-newbie.blogspot.com/2009/07/deployment.html"&gt;Проблемы в CentOS&lt;/a&gt; разрешились тривиальным удалением mod_python (с его помощью публиковался &lt;a href="http://trac.edgewall.org/"&gt;trac&lt;/a&gt;). Одновременно включить его и mod_wsgi не удалось, да и не нужно в принципе, trac ведь может  и через wsgi работать.&lt;br /&gt;В общем не надо 2 разными способами решать одну и ту же задачу одновременно - скорей всего только заморочки лишние нарисуются.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3089223885326551607?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3089223885326551607/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/07/rip-modpython.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3089223885326551607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3089223885326551607'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/07/rip-modpython.html' title='R.I.P. mod_python'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-2300419620297353311</id><published>2009-07-24T20:56:00.004+04:00</published><updated>2009-07-24T21:01:28.725+04:00</updated><title type='text'>Deployment не задался.</title><content type='html'>После войн сервером под CentOS пришёл к тому, что mod_wsgi поставить не удаётся, поэтому пока ограничусь mod_python. После отпуска надо будет задуматься о каком-то альтернативном хостинге.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-2300419620297353311?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/2300419620297353311/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/07/deployment.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2300419620297353311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2300419620297353311'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/07/deployment.html' title='Deployment не задался.'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-4674275621665841911</id><published>2009-07-18T23:57:00.002+04:00</published><updated>2009-07-19T00:35:14.630+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>О сколько нам пакетов чудных...</title><content type='html'>Пытаюсь сейчас разобрать деплоймент Django-приложений. Остановился на &lt;a href="http://www.nongnu.org/fab/"&gt;fabric&lt;/a&gt;, &lt;a href="http://pypi.python.org/pypi/virtualenv"&gt;virtualenv&lt;/a&gt; и &lt;a href="http://pip.openplans.org/"&gt;pip&lt;/a&gt;. Всё вроде бы интересно, но вот возникли некоторые неувязки - PIL не устанавливается через&lt;br /&gt;&lt;pre style="margin: 0pt 10px;"&gt;&lt;br /&gt;#pip install PIL&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;можно, конечно использовать&lt;br /&gt;&lt;pre style="margin: 0pt 10px;"&gt;&lt;br /&gt;#pip install http://effbot.org/downloads/Imaging-1.1.6.tar.gz&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;но как-то "не спортивно", поэтому захотелось использовать site-packages куда будут установлены некоторые "дефолтные" пакеты (в т.ч. PIL). Только вот окружения, созданные через virtualenv, не хотели видеть глобальные пакеты. Пришлось посерьёзней разобраться с разбором импортов в python.&lt;br /&gt;Причина оказалась в том, что товарищи из Ubuntu "пошаманили" с python 2.6 и site-packages зовутся dist-packages, буквально-таки:&lt;br /&gt;&lt;pre style="margin: 0pt 10px;"&gt;&lt;br /&gt;  if use_default_sitedirname:&lt;br /&gt;      return pylib.replace('/dist-packages', '/site-packages')&lt;br /&gt;  else:&lt;br /&gt;      return pylib&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;поэтому ставить надо было не через sudo pip install/easy_install virtualenv, а с помощью sudo apt-get install python-virtualenv.&lt;br /&gt;Теперь я понимаю, о чём Джеймс Беннет писал в своём &lt;a href="http://www.b-list.org/weblog/2008/dec/14/packaging/"&gt;посте про проблемы с пакетами&lt;/a&gt;.&lt;br /&gt;Продолжу разбираться дальше и, наверное, напишу пост о варианте развёртывания, который у меня получится.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-4674275621665841911?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/4674275621665841911/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/07/blog-post_18.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4674275621665841911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/4674275621665841911'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/07/blog-post_18.html' title='О сколько нам пакетов чудных...'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-7702706247604808857</id><published>2009-07-15T23:31:00.003+04:00</published><updated>2009-07-16T00:14:03.677+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='видео'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>Дебажим джангу</title><content type='html'>Вроде начал толком писать приложение на Django и, естественно, понадобилось как-то отлаживать приложения. Довольно приятно был удивлён наличием удобных вещей по сравнению с PHP (или может я просто так плохо умею с ним обращаться?):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://docs.python.org/library/pdb.html"&gt;bdp&lt;/a&gt;/&lt;a href="http://pypi.python.org/pypi/ipdb"&gt;ipdb&lt;/a&gt; позволяет ставить брейкпойнты в коде и делать пошаговую отладку, конечно, не Eclipse/Visual Studio, но вполне годно к использованию;&lt;/li&gt;&lt;li&gt;&lt;a href="http://rob.cogit8.org/blog/2008/Sep/19/introducing-django-debug-toolbar/"&gt;django-debug-toolbar&lt;/a&gt;, о ней я уже &lt;a href="http://django-newbie.blogspot.com/2009/04/blog-post_03.html"&gt;писал&lt;/a&gt;, с тех пор там появилась ещё рубрика "сигналы";&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/django-command-extensions/"&gt;django-extensions&lt;/a&gt; в связке с &lt;a href="http://werkzeug.pocoo.org/"&gt;werkzeug&lt;/a&gt;, про использование extensions для рисования диаграмм моделей я уже &lt;a href="http://django-newbie.blogspot.com/2009/05/blog-post.html"&gt;упоминал&lt;/a&gt;, но вот расширение страницы ошибки до того, что там становится доступна коммандная строка, меня сильно впечатлило.&lt;/li&gt;&lt;/ol&gt;Сухими словам или картинками объяснять получится не очень демоснтративно, поэтому рекомендую посмотреть неплохие  касты от Eric Holscher &lt;a href="http://showmedo.com/videotutorials/series?name=RjHhY85GD"&gt;тут&lt;/a&gt; и &lt;a href="http://showmedo.com/videotutorials/video?name=3280000&amp;amp;fromSeriesID=328"&gt;тут&lt;/a&gt;.&lt;br /&gt;Оттуда же я узнал, что даже стандартная страница об ошибке Django информативнее, чем мне казалось (к примеру можно посмотреть участки кода и отправить стэктрейс на dpaste.com).&lt;br /&gt;И ещё складывается такое впечатление, что на Django как-то больше думаешь о строении приложения с архитектурной точки зрения, т.е. как отдельные части взаимосвязаны и, возможно ли какое-нибудь переиспользование кода, а не с точки зрения "вот тут параметр А, надо отобразить табличку в Н строк". Хотя задачка не очень показательная, т.к. не из типовых для джанго, по-моему.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-7702706247604808857?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/7702706247604808857/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/07/blog-post_15.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7702706247604808857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7702706247604808857'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/07/blog-post_15.html' title='Дебажим джангу'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-7925980983062374256</id><published>2009-07-01T23:24:00.002+04:00</published><updated>2009-07-01T23:38:13.823+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><title type='text'>Чтож ещё почитать?</title><content type='html'>Дочитал &lt;a href="http://www.diveintopython.org/"&gt;Dive Into Python&lt;/a&gt;, как-то  не очень меня впечатлила книга. Наверное, язык прост до того, что "разжёвывание" приёмов кажется черезмерным, да ещё и используемый там способ подачи материала в виде кода со сносками как-то мне совсем не по душе...&lt;br /&gt;Следующей "питонистой" книгой, думаю должна стать &lt;cite&gt;Practical Django Projects&lt;/cite&gt;, о которой я писал в &lt;a href="http://django-newbie.blogspot.com/2009/06/blog-post_24.html"&gt;предыдущем посте&lt;/a&gt;.&lt;br /&gt;Или, может быть, есть что-нибудь другое стоящее внимания?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-7925980983062374256?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/7925980983062374256/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/07/blog-post.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7925980983062374256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7925980983062374256'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/07/blog-post.html' title='Чтож ещё почитать?'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-5532554930428145811</id><published>2009-06-24T22:48:00.002+04:00</published><updated>2009-06-24T22:53:27.230+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><title type='text'>Хороших книг должно быть много!</title><content type='html'>Джеймс Беннет &lt;a href="http://www.b-list.org/weblog/2009/jun/23/second-edition/"&gt;выпустил&lt;/a&gt; &lt;a href="http://www.apress.com/book/view/9781430219385"&gt;второе издание&lt;/a&gt; своей книги "Practical Django Projects" (книга была дополнена и приведена к версии Django 1.1). Думаю, если не уйду из веба и таки начну толком переход наших проектов на Django, то надо будет купить электрическую версию.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-5532554930428145811?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/5532554930428145811/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/06/blog-post_24.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5532554930428145811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5532554930428145811'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/06/blog-post_24.html' title='Хороших книг должно быть много!'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-1901481102311238766</id><published>2009-06-14T22:33:00.008+04:00</published><updated>2009-06-17T12:28:45.490+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='библиотеки'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Делаем правильный суп</title><content type='html'>По совету &lt;a href="http://www.blogger.com/profile/09663010003031142331"&gt;bw&lt;/a&gt; решил попробовать html5lib для решения &lt;a href="http://django-newbie.blogspot.com/2009/05/blog-post_13.html"&gt;заморочки с Beautifulsoup&lt;/a&gt; и получилось избавиться от некрасивого воркараунда (правда, ворнинг словился):&lt;br /&gt;&lt;pre style='color:#000000;background:#ffffff;'&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#800000; font-weight:bold; '&gt;import&lt;/span&gt; urllib&lt;br /&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; html &lt;span style='color:#808030; '&gt;=&lt;/span&gt; urllib&lt;span style='color:#808030; '&gt;.&lt;/span&gt;urlopen&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;'http://django-newbie.blogspot.com/'&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;.&lt;/span&gt;read&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#800000; font-weight:bold; '&gt;import&lt;/span&gt; html5lib&lt;br /&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#800000; font-weight:bold; '&gt;from&lt;/span&gt; html5lib &lt;span style='color:#800000; font-weight:bold; '&gt;import&lt;/span&gt; treebuilders&lt;br /&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; parser &lt;span style='color:#808030; '&gt;=&lt;/span&gt; html5lib&lt;span style='color:#808030; '&gt;.&lt;/span&gt;HTMLParser&lt;span style='color:#808030; '&gt;(&lt;/span&gt;tree&lt;span style='color:#808030; '&gt;=&lt;/span&gt;treebuilders&lt;span style='color:#808030; '&gt;.&lt;/span&gt;getTreeBuilder&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;"beautifulsoup"&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; soup &lt;span style='color:#808030; '&gt;=&lt;/span&gt; parser&lt;span style='color:#808030; '&gt;.&lt;/span&gt;parse&lt;span style='color:#808030; '&gt;(&lt;/span&gt;html&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#808030; '&gt;/&lt;/span&gt;usr&lt;span style='color:#808030; '&gt;/&lt;/span&gt;local&lt;span style='color:#808030; '&gt;/&lt;/span&gt;lib&lt;span style='color:#808030; '&gt;/&lt;/span&gt;python2&lt;span style='color:#808030; '&gt;.&lt;/span&gt;&lt;span style='color:#008c00; '&gt;6&lt;/span&gt;&lt;span style='color:#808030; '&gt;/&lt;/span&gt;dist&lt;span style='color:#808030; '&gt;-&lt;/span&gt;packages&lt;span style='color:#808030; '&gt;/&lt;/span&gt;html5lib&lt;span style='color:#808030; '&gt;-&lt;/span&gt;&lt;span style='color:#008000; '&gt;0.11&lt;/span&gt;&lt;span style='color:#808030; '&gt;.&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;-&lt;/span&gt;py2&lt;span style='color:#808030; '&gt;.&lt;/span&gt;&lt;span style='color:#008000; '&gt;6.&lt;/span&gt;egg&lt;span style='color:#808030; '&gt;/&lt;/span&gt;html5lib&lt;span style='color:#808030; '&gt;/&lt;/span&gt;inputs&lt;br /&gt;tream&lt;span style='color:#808030; '&gt;.&lt;/span&gt;py&lt;span style='color:#808030; '&gt;:&lt;/span&gt;&lt;span style='color:#008c00; '&gt;367&lt;/span&gt;&lt;span style='color:#808030; '&gt;:&lt;/span&gt; DeprecationWarning&lt;span style='color:#808030; '&gt;:&lt;/span&gt; object&lt;span style='color:#808030; '&gt;.&lt;/span&gt;&lt;span style='color:#e34adc; '&gt;__init__&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; takes no parameters&lt;br /&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#808030; '&gt;&gt;&lt;/span&gt; soup&lt;span style='color:#808030; '&gt;.&lt;/span&gt;findAll&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;'link'&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt; &lt;span style='color:#800080; '&gt;{&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;'type'&lt;/span&gt;&lt;span style='color:#808030; '&gt;:&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;'application/rss+xml'&lt;/span&gt;&lt;span style='color:#800080; '&gt;}&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;[&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#808030; '&gt;[&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;'href'&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#0000e6; '&gt;u'http://django-newbie.blogspot.com/feeds/posts/default?alt=rss'&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-1901481102311238766?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/1901481102311238766/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/06/blog-post.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/1901481102311238766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/1901481102311238766'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/06/blog-post.html' title='Делаем правильный суп'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3757423259109648296</id><published>2009-05-15T11:49:00.001+04:00</published><updated>2009-05-15T11:52:28.086+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Ну зачем так?</title><content type='html'>Самое загадочное в Python, на мой взгляд - ';'.join(words) &lt;br /&gt;Неужто есть рациональное объяснение этому?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3757423259109648296?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3757423259109648296/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/05/blog-post_15.html#comment-form' title='Комментарии: 12'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3757423259109648296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3757423259109648296'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/05/blog-post_15.html' title='Ну зачем так?'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-6348927555575709741</id><published>2009-05-13T20:55:00.004+04:00</published><updated>2009-05-13T22:32:19.332+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Суп с приключениями</title><content type='html'>Понадобилось тут вырезать адрес RSS-ленты со страничек. Ну, думаю, возьму &lt;a href="http://www.crummy.com/software/BeautifulSoup/"&gt;BeautifulSoup&lt;/a&gt; и делов-то. Для ЖЖ всё прошло без проблем:&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;import&lt;/span&gt; urllib&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; html &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt; urllib&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;urlopen&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;'http://kurilka.livejournal.com/'&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;read&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;from&lt;/span&gt; BeautifulSoup &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;import&lt;/span&gt; BeautifulSoup&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; soup &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt; BeautifulSoup&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;html&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; soup&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;findAll&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;'link'&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;'type'&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;'application/rss+xml'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 140, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;'href'&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;u'http://kurilka.livejournal.com/data/rss'&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Ну, думаю, гораздо более демонстративно будет, если я вытяну RSS прямо для этого же блога, куда пишу сейчас этот пост. Но не тут-то было...&lt;br /&gt;Упало оно с криком &lt;i&gt;HTMLParser.HTMLParseError: bad end tag: u"&amp;#60;/scr'+'ipt&amp;#62;"&lt;/i&gt;. Причём, оказывается, что это программеры Google попирают &lt;a href="http://www.w3.org/TR/html4/appendix/notes.html#notes-specifying-data"&gt;спецификации W3C&lt;/a&gt; и не экранируют "&amp;#60;/" в тексте скрипта. Поэтому пришлось пока сделать временную "затычку": &lt;/div&gt;&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;import&lt;/span&gt; urllib&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; html &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt; urllib&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;urlopen&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;'http://django-newbie.blogspot.com/'&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;read&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; html &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt; html&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;replace&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"&amp;#60;/src'"&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 0, 230);"&gt;''&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;from&lt;/span&gt; BeautifulSoup &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;import&lt;/span&gt; BeautifulSoup&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; soup &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt; BeautifulSoup&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;html&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; soup&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;findAll&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;'link'&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;'type'&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;'application/rss+xml'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 140, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;'href'&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;u'http://django-newbie.blogspot.com/feeds/posts/default?alt=rss'&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Вот так и воюем: то с нестрогими спецификациями, то с нестрогим их соблюдением...&lt;br /&gt;P.S. И ещё больше добила борьба с &lt;a href="http://www.blogger.com/"&gt;blogger.com&lt;/a&gt;, жестоко коверкающим тэги&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-6348927555575709741?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/6348927555575709741/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/05/blog-post_13.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6348927555575709741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6348927555575709741'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/05/blog-post_13.html' title='Суп с приключениями'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-8942920284187976842</id><published>2009-05-04T23:13:00.002+04:00</published><updated>2009-05-04T23:18:41.571+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Продолжая тему открытости</title><content type='html'>Simon Willison выложил в публичный доступ &lt;a href="http://github.com/simonw/djangopeople.net/tree/master"&gt;репозиторий&lt;/a&gt; с исходным кодом &lt;a href="http://djangopeople.net/"&gt;djangopeople.net&lt;/a&gt;, думаю полезно в качестве хорошего примера по Django&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-8942920284187976842?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/8942920284187976842/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/05/blog-post_04.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8942920284187976842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8942920284187976842'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/05/blog-post_04.html' title='Продолжая тему открытости'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-8540786607689744172</id><published>2009-05-03T11:15:00.002+04:00</published><updated>2009-05-03T12:26:11.307+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='видео'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Касты из Ченнаи</title><content type='html'>В рамках пассивного обучения Django посмотрел тут касты одного индуса под названи &lt;a href="http://showmedo.com/videos/video?name=1100000&amp;amp;fromSeriesID=110"&gt;Learn Django: Create a Wiki in 20 minutes&lt;/a&gt;. В целом довольно познавательные ролики, только вот как-то оно неаккуратно. В первых 2 частях код правится в VIM, а в третьей - в WingIDE. И оформление кода несколько стремновато. Ещё это усугубляет, что сделано оно на версии 0.96, а в версия 1.0 привнесла среди прочего пару актуальных изменений:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Текст выводимый в шаблонах "автоискейпится" и можно безопасно выводить любые переменные в результирующий html, т.е. не надо каждый раз добавлять фильтр escape для переменных, а наоборот лишь в случае необходимости добавлять фильтр &lt;a href="http://docs.djangoproject.com/en/dev/ref/templates/builtins/#safe"&gt;safe&lt;/a&gt; (или тэг &lt;a href="http://docs.djangoproject.com/en/dev/ref/templates/builtins/#autoescape"&gt;autoescape&lt;/a&gt;);&lt;/li&gt;&lt;li&gt;В urlconf'ах появились имена паттернов, и тэг url может принимать эти самые имена, но судя по &lt;a href="http://www.djangoproject.com/documentation/0.96/templates/#url"&gt;документации&lt;/a&gt; тэг этот был и ранее, так что "прибивание гвоздями" адресов нельзя оправдать (показательно, как он сам потом ручками во всех шаблонах меняет адреса на новый формат).&lt;/li&gt;&lt;/ul&gt;Думаю, автору бы не помешало посмотреть презентацию о reusable apps, про которую я&lt;a href="http://django-newbie.blogspot.com/2009/04/blog-post_07.html"&gt; писал&lt;/a&gt;. Но в целом (если откинуть шероховатости) довольно неплохой пример для новичков.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-8540786607689744172?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/8540786607689744172/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/05/blog-post_03.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8540786607689744172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8540786607689744172'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/05/blog-post_03.html' title='Касты из Ченнаи'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-7054915253263550664</id><published>2009-05-02T20:20:00.004+04:00</published><updated>2009-05-02T20:40:54.037+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Рисуем диаграмки наших моделей</title><content type='html'>Наткнулся тут на ещё одну полезную вещь - &lt;a href="http://code.google.com/p/django-command-extensions/"&gt;Django Command Extensions&lt;/a&gt;, подборку разных полезных вспомогательных штуковин - запуск скрипта в контексте Django, управление job'ами, экспорт адресов электронной почты и др.&lt;br /&gt;Но самой прикольной мне показалась комманда graph_models - которая строит граф зависимостей между моделями в приложении (по сути ER-диаграмму) при помощи &lt;a href="http://www.graphviz.org/"&gt;GraphViz&lt;/a&gt;.&lt;br /&gt;К примеру вот диаграммка для приложения из кастов Эрика Флоренцано, о которых я &lt;a href="http://django-newbie.blogspot.com/2009/03/blog-post_23.html"&gt;писал&lt;/a&gt; :&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.ru/lh/photo/kA9yjaeNieJLC1g4wVOB2g?authkey=Gv1sRgCJDKxLCd7J6ewAE&amp;amp;feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_CmcKoj9unS4/Sfxzf6D3KGI/AAAAAAAAAiM/bTn7NPpgp1I/s144/models.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Пример, правда, не очень наглядный, т.к. моделей не из состава Django там всего 3 штуки, но при увеличении сложности приложения такая диаграммка по-моему довольно полезна для понимания структуры данных, с которым работает приложение. Надо будет поставить себе заметку построить схемку для приложения побольше.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-7054915253263550664?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/7054915253263550664/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/05/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7054915253263550664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7054915253263550664'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/05/blog-post.html' title='Рисуем диаграмки наших моделей'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_CmcKoj9unS4/Sfxzf6D3KGI/AAAAAAAAAiM/bTn7NPpgp1I/s72-c/models.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-6422680390775999582</id><published>2009-04-26T12:30:00.005+04:00</published><updated>2009-04-26T14:10:51.495+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='философия'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Страшный секрет</title><content type='html'>Дело в том, что в Django есть магия, которую нельзя удалить! Собственно я вот об этом:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://djangopony.com/" class="ponybadge" title="Magic! Ponies! Django! Whee!"&gt;&lt;img src="http://media.djangopony.com/img/small/badge.png" alt="ponybadge" width="210" height="65" style="border-width:0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;И вообще это &lt;a href="http://code.google.com/p/django-awesome/source/browse/trunk/awesome.py"&gt;необычайный&lt;/a&gt; фреймворк (для тех кто не в курсе), а &lt;a href="http://iamcal.com/"&gt;Cal Henderson&lt;/a&gt; вообще его &lt;a href="http://www.youtube.com/watch?v=i6Fr65PFqfk"&gt;ненавидит и рассказывает об этом серьёзным и зловещим голосом&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;А теперь, когда вы это узнали, вас придётся убрать.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-6422680390775999582?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/6422680390775999582/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_26.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6422680390775999582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6422680390775999582'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_26.html' title='Страшный секрет'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3855885820854528904</id><published>2009-04-22T22:52:00.003+04:00</published><updated>2009-04-22T23:23:46.267+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='captcha'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='wizard'/><title type='text'>Патчим Django</title><content type='html'>Для задачи, которую на досуге пописываю, понадобилось мне изобразить wizard, причём на последней странице нужна капча против ботов.&lt;br /&gt;Для капчи я решил использовать &lt;a href="http://github.com/barbuza/supercaptcha/tree/master"&gt;supercaptcha&lt;/a&gt;. В принципе это не единственное решение, скажем, я &lt;a href="http://django-newbie.blogspot.com/2009/03/blog-post_27.html"&gt;писал уже&lt;/a&gt; о Django Simple Captcha, но суперкапча мне как-то больше приглянулась.&lt;br /&gt;Что касается wizard'а, то в django.contrib есть класс FormWizard, предназначенный как раз для этого.&lt;br /&gt;И вроде всё хорошо, но обнаружился ньюанс - на самом последнем шаге FormWizard валидирует заново все данные, которые ввёл пользователь. Для обычных полей проблем никаких не возникает (разве что чуть больше времени тратится), а с капчей такой фокус не пройдёт, т.к. валидация у неё "одноразовая". Править капчу, на мой взгляд, в данном случае неправильно, поэтому пришлось внести изменения в FormWizard, о которых я написал &lt;a href="http://code.djangoproject.com/ticket/10810"&gt;ticket 10810&lt;/a&gt; в Trac Django. По сути дела там реализован "хак", т.к. просто последняя форма не ревалидируется заново. Как решить задачу чтобы "и волки сыты, и овцы целы" я так пока и не придумал. Но текущее решение вполне работоспособное, поэтому пока остановлюсь на неём.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3855885820854528904?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3855885820854528904/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/04/django.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3855885820854528904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3855885820854528904'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/04/django.html' title='Патчим Django'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3094853855023341315</id><published>2009-04-16T22:17:00.002+04:00</published><updated>2009-04-16T22:28:08.603+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Нам скрывать нечего!</title><content type='html'>Django - фреймворк с открытым кодом. И мало того, что открыт код самого фреймворка, если есть желание, то вполне можно посмотреть исходный код основного сайта Django - &lt;a href="http://djangoproject.com/"&gt;djangoproject.com&lt;/a&gt;, для этого надо лишь зайти в &lt;a href="http://code.djangoproject.com/svn/djangoproject.com/"&gt;репозиторий Subversion&lt;/a&gt;. Я для себя, к примеру, обнаружил там ссылку на библиотечку &lt;a href="http://feedparser.org/"&gt;Universal Feed Parser&lt;/a&gt;, как раз для проекта, который хочется реализовать.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3094853855023341315?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3094853855023341315/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_16.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3094853855023341315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3094853855023341315'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_16.html' title='Нам скрывать нечего!'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-7473978114206592626</id><published>2009-04-09T21:57:00.002+04:00</published><updated>2009-04-09T22:14:49.767+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>На деревню дедушке</title><content type='html'>Если продолжать тему &lt;a href="http://django-newbie.blogspot.com/2009/03/django_30.html"&gt;ресурсов, посвящённых Django&lt;/a&gt;, то обязательно стоит упомянуть списки Google группы:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;на английском это &lt;a href="http://groups.google.com/group/django-users"&gt;http://groups.google.com/group/django-users&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;а на русском - &lt;a href="http://groups.google.com/group/django-russian"&gt;http://groups.google.com/group/django-russian&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;Правда отечественная не очень-то активна. А на английском немного раздражают сообщения с довольно тривиальными вопросами, например с проблемой в виде опечатки в коде, или по поводу вещей, хорошо описанных в документации. Но зато попадаются очень интересные и информативные ссылки, так, например, &lt;a href="http://django-newbie.blogspot.com/2009/04/blog-post_07.html"&gt;предыдущее видео&lt;/a&gt; я как раз подсмотрел в рассылке.&lt;br /&gt;И ещё на мой вопрос, заданный вчера там, никто не ответил, хотя обычно отвечают быстро и исчерпывающе. Наверное слишком специфический сценарий, придётся решать самому :)&lt;br /&gt;В целом, думаю, что группы - довольно полезный источник информации, к тому же там можно получить консультацию знающих людей.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-7473978114206592626?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/7473978114206592626/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_09.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7473978114206592626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/7473978114206592626'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_09.html' title='На деревню дедушке'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-8241091638924005020</id><published>2009-04-07T23:21:00.001+04:00</published><updated>2009-05-03T12:21:09.329+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='видео'/><category scheme='http://www.blogger.com/atom/ns#' term='философия'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Простая магия переиспользования</title><content type='html'>Наткнулся на очень интересное &lt;a href="http://www.youtube.com/watch?v=A-S0tqpPga4"&gt;видео&lt;/a&gt; с &lt;a href="http://www.b-list.org/"&gt;Джеймсом Беннетом&lt;/a&gt;, одним из значимых разработчиков в Django и автором книги &lt;a href="http://www.amazon.com/dp/1590599969/"&gt;Practical Django Projects&lt;/a&gt;, несколько устаревшей (по версии фреймворка), но, судя по всему, стоящей (поэтому она стоит у меня в списке к прочтению). В этом видео он рассказывает об очень важной составляющей идеологии фреймворка - идеи reusable apps, т.е. переиспользуемых приложений. В соответствии с ней, сайт представляет собой не оргомную монолитную кучу кода, а совокупность отдельных приложений, небольших, отвечающих за отдельную функциональность, но делающих это хорошо. За счёт этого приложение становится более прозрачным, код - более переиспользуемым, и повышается его поддерживаемость и расширяемость. На примерах показывается каким образом можно строить эти самые reusable apps.&lt;br /&gt;Этому же посвящена 1-я часть слайдов с презентации &lt;a href="http://jacobian.org/speaking/2009/real-world-django/"&gt;Real World Django&lt;/a&gt;, &lt;a href="http://us.pycon.org/2009/tutorials/schedule/1PM2/"&gt;прошедшей&lt;/a&gt; на PyCon 2009 (очень жалко, что не опубликовано видео оттуда).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-8241091638924005020?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/8241091638924005020/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_07.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8241091638924005020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8241091638924005020'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_07.html' title='Простая магия переиспользования'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3337537348828690941</id><published>2009-04-05T10:40:00.003+04:00</published><updated>2009-04-05T10:53:30.628+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><title type='text'>Простота -  сильное преимущество.</title><content type='html'>Вначале я уже &lt;a href="http://django-newbie.blogspot.com/2009/03/blog-post.html"&gt;писал&lt;/a&gt;, что хотел попробовать веб-разработку на Haskell, и этот пункт всё ещё остаётся в моём TODO-списке.&lt;br /&gt;Однако, читая &lt;a href="http://gregorycollins.net/posts/2009/03/30/building-a-website-part-2"&gt;заметки&lt;/a&gt; по воду создания сайта на &lt;a href="http://happstack.com/"&gt;Happstack&lt;/a&gt; (а это, на мой взгляд, один из интересных веб-фреймворков на Haskell) натыкаешься на разные моноиды, монадные трансформеры и т.п. вещи. В итоге у меня получается, что больше думаешь над тем как это всё выражено в типах, чем над самим содержанием приложения. Тогда как на Django прочитав учебник уже можно ваять, немного подглядывая по поводу конкретных тонкостей.&lt;br /&gt;Хотя, возможно, тут сказывается мой небольшой опыт разработки на Haskell и, вероятно, если бы я попрограммировал полгодика, то уже бы все эти монады и иже с ними не оттягивали на себя внимание.&lt;br /&gt;Только вот python до Django я практически не знал, а по Haskell прочитал далеко не один tutorial.&lt;br /&gt;Так что фактор кривой обучения играет довольно сильно в пользу Django.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3337537348828690941?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3337537348828690941/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_05.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3337537348828690941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3337537348828690941'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_05.html' title='Простота -  сильное преимущество.'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-6507125017832365586</id><published>2009-04-03T23:20:00.002+04:00</published><updated>2009-04-03T23:39:51.867+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='расширения'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Инструмент для ловли жуков</title><content type='html'>Обнаружил тут довольно интересное расширение - &lt;a href="http://rob.cogit8.org/blog/2008/Sep/19/introducing-django-debug-toolbar/"&gt;Django Debug Toolbar&lt;/a&gt;, которое добавляет на сайт вспомогательную панельку с информацией, полезной для отладки приложения. Если точнее там можно увидеть:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;полную версию дистрибутива джанго;&lt;/li&gt;&lt;li&gt;время выполнения с разбивкой и числом переключений контекста;&lt;/li&gt;&lt;li&gt;настройки проекта (т.е. по сути ваш settings.py);&lt;/li&gt;&lt;li&gt;заголовки HTTP;&lt;/li&gt;&lt;li&gt;параметры запроса, т.е. куки, содержание словаря сессии, параметры GET и POST;&lt;/li&gt;&lt;li&gt;запросы SQL с их временем выполнения и планами;&lt;/li&gt;&lt;li&gt;шаблоны, которые использовались для форматирования ответа;&lt;/li&gt;&lt;li&gt;логи приложения (правда я ещё даже не пробовал их использовать)&lt;/li&gt;&lt;/ul&gt;Прикольная вещь на мой взгляд.&lt;br /&gt;И всё это есть простое расширение на python, устанавливаемое буквально за 5 минут. Т.е. имеем ещё один аргумент в пользу расширяемости и удобства фреймворка.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-6507125017832365586?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/6507125017832365586/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_03.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6507125017832365586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6507125017832365586'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post_03.html' title='Инструмент для ловли жуков'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-5805382578049815739</id><published>2009-04-01T22:28:00.004+04:00</published><updated>2009-04-02T00:04:48.337+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='философия'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><title type='text'>Язык определяет мышление</title><content type='html'>Наверное, многие знают, что, согласно &lt;a href="http://ru.wikipedia.org/wiki/%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%A1%D0%B5%D0%BF%D0%B8%D1%80%D0%B0_%E2%80%94_%D0%A3%D0%BE%D1%80%D1%84%D0%B0"&gt;гипотезе Сепира - Уорфа&lt;/a&gt;, язык человека определяет его мышление и способ познания реальности. Поэтому, во-первых, программисту не стоит замыкаться на одном языке, и, во-вторых,  стоит выбирать такой язык, который как можно лучше позволяет реализовывать проще и удобне решения задач, которые стоят перед разработчиком. К области веб-приложений это тоже вполне применимо.&lt;br /&gt;Так вот "основой" для Django служит очень неплохой язык python: довольно простой и в то же время одновременно выразительно мощный и элегантный. Одной из наиболее ценных черт его, на мой взгляд, является &lt;span style="font-weight: bold;"&gt;целостность&lt;/span&gt;, т.е. все составляющие следуют общим принципам (наверное, тут снова стоит упомянуть &lt;a href="http://www.python.org/dev/peps/pep-0020/"&gt;The Zen of Python&lt;/a&gt;), одним из которых является &lt;span style="font-style: italic;"&gt;There's Only One Way To Do It&lt;/span&gt; (Есть только один способ сделать это). Следование этому принципу уменьшает число вариантов, которые стоит рассматривать при решение задачи, поэтому разработчик тратит меньше времени и усилий, что не может не радовать. Хотя есть мнение, что ограничение свободы не есть положительная вещь, т.к. рамки сковывают "твоческий порыв". В качестве противоположной идеи сразу вспоминается перловский &lt;a href="http://en.wikipedia.org/wiki/TMTOWTDI"&gt;TIMTOWTDI&lt;/a&gt;. Однако, по-моему простота и скорость работы играют чаще всего определяющую роль, а если надо будет решать какие-то более "креативные" задачи, то никто не запрещает использовать другой инструмент.&lt;br /&gt;В python я ещё пока совсем новичёк, поэтому для "подтягивания" своих навыков штудирую книгу &lt;a href="http://www.diveintopython.org/"&gt;Dive Into Python&lt;/a&gt; (текст доступен онлайн, есть и &lt;a href="http://ru.diveintopython.org/"&gt;русская версия&lt;/a&gt;, хотя я предпочитаю читать оригинал) - довольно неплохо написано, правда стиль со сносками к исходникам мне немного не нравится.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-5805382578049815739?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/5805382578049815739/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5805382578049815739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5805382578049815739'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/04/blog-post.html' title='Язык определяет мышление'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-2826674085309608</id><published>2009-03-30T23:19:00.002+04:00</published><updated>2009-03-30T23:34:23.644+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Ресурсы о Django</title><content type='html'>Наверное, очень большая часть информации по поводу Django раскидана по многочисленным блогам разработчиков, которые используют этот фреймворк, но всё же выделю "отдельно стоящие" сайты на эту тему:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://djangoproject.com/"&gt;Родной сайт&lt;/a&gt; проекта, самый логичный и самый исчерпывающий источник, там есть вики, документация, исходные коды, ссылки на другие источники и др.;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://djangoproject.com/"&gt;&lt;/a&gt;&lt;a href="http://www.djangobook.com/"&gt;Djangobook&lt;/a&gt; - книга, очень хорошее введение, о ней я уже &lt;a href="http://django-newbie.blogspot.com/2009/03/django-book.html"&gt;писал&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;&lt;a href="http://thisweekindjango.com/"&gt;This Week In Django&lt;/a&gt; (сокращённо TWiD), авторы которого говорят, что это ресурс обо всём по поводу Django, там же они выкладывают еженедельные подкасты, правда последний почему-то датирован 28-м февраля.&lt;/li&gt;&lt;/ul&gt;Думаю, что есть ещё интересные ресурсы, буду выкладывать новые ссылки по мере того, как буду их находить. Так что - stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-2826674085309608?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/2826674085309608/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/03/django_30.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2826674085309608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2826674085309608'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/03/django_30.html' title='Ресурсы о Django'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-534280528646761434</id><published>2009-03-29T10:27:00.003+04:00</published><updated>2009-03-29T10:34:48.464+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Простейший способ поставить Django под Windows</title><content type='html'>Всё делается элементарно:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;заходим на &lt;a href="http://www.instantdjango.com/"&gt;www.instantdjango.com&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;скачиваем файлик;&lt;/li&gt;&lt;li&gt;распаковываем его;&lt;/li&gt;&lt;li&gt;начинаем ваять наш супер-пупе-мегасайт на Django&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-style: italic;"&gt;P.S. Сам, правда, пользуюсь линуксом, но, т.к. большая часть народа сидит под ОС из Редмонда, думаю, эта ссылка будет не бесполезна.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-534280528646761434?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/534280528646761434/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/03/django-windows.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/534280528646761434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/534280528646761434'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/03/django-windows.html' title='Простейший способ поставить Django под Windows'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-6439848925767913682</id><published>2009-03-28T09:22:00.002+03:00</published><updated>2009-03-28T09:35:51.099+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><title type='text'>Про Django Book и версии</title><content type='html'>Для получения обзорных сведений по Django на мой взгляд очень хорошо подходит Django Book от Adrian Holovaty и Jacob Kaplan-Moss, который &lt;a href="http://www.djangobook.com/"&gt;доступен онлайн&lt;/a&gt;.&lt;br /&gt;Правда есть 2 версии книги: первая для версии 0.96 фреймворка и вторая (до конца не завершённая) для 1.0. Я почти дочитал вторую, актуальную версию, но заметил пару проблемок.&lt;br /&gt;Во-первых почему-то уже которую неделю недоступна глава 9.&lt;br /&gt;Во-вторых возник у меня вопрос: как добавлять "кастомные" поля к пользователям (а инфраструктура авторизации и аутентификации уже встроена в Django)? Обнаружил в официальных доках, что делается, как обычно, очень просто, только информация об этом присутствует в версии 1.0 Django Book, а в соответствующей главе 2.0 почему-то нет упоминания об этом.&lt;br /&gt;Однако в целом очень хорошая книжка - читается легко и в итоге получаешь довольно целостную картину устройства фреймворка и того, как писать приложения для него.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-6439848925767913682?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/6439848925767913682/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/03/django-book.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6439848925767913682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/6439848925767913682'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/03/django-book.html' title='Про Django Book и версии'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-3711695913218000836</id><published>2009-03-27T00:32:00.002+03:00</published><updated>2009-03-27T00:45:31.300+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='captcha'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Простота - залог успеха</title><content type='html'>Всё-таки очень подкупает в Django его компонентность и слабосвязанность различных частей. К примеру в том примерчике, что сейчас пытаюсь сделать, понадобилась мне капча. Стандартной нет с фреймворком, но на сайте нашёл ссылку на &lt;a href="http://code.google.com/p/django-simple-captcha/"&gt;Django Simple Captcha&lt;/a&gt; (кстати, на Google Code довольно много проектов для Django), решил попробовать:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;сделал этому проекту svn co ;&lt;/li&gt;&lt;li&gt;добавил ссылку к python path;&lt;/li&gt;&lt;li&gt;добавил CaptchaField в мою модель;&lt;/li&gt;&lt;li&gt;добавил соответствующий url;&lt;/li&gt;&lt;li&gt;и всё заработало :)&lt;/li&gt;&lt;/ul&gt;В общей сложности на решение задачи ушло минут 10-20. С решением её на PHP для варианта, когда нет механизма "из коробки", даже сравнивать не охота :)&lt;br /&gt;В общем - переиспользование рулит не по-детски ибо это сила!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-3711695913218000836?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/3711695913218000836/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/03/blog-post_27.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3711695913218000836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/3711695913218000836'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/03/blog-post_27.html' title='Простота - залог успеха'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-5534723209115441478</id><published>2009-03-25T22:25:00.002+03:00</published><updated>2009-03-25T23:22:35.283+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='философия'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Метод избавления от рутинных задач в Django</title><content type='html'>Вебразработка очень часто навевает скуку на людей, которые ей занимаются. Ведь, несмотря на всю увлекательность и прелесть интернета, очень много вещей повторяется из раза в раз. Для пользователя это скорей плюс, т.к. не надо каждый раз выяснять, какие ссылки нажимать и т.д. Но вот для программиста это становится очень утомительно, когда приходится писать не первый десяток одинаковых формочек, списков объектов и т.п., которые очень похожи и отличаются лишь небольшими ньюансами. Получается, что разработчик теряет мотивацию, начинает допускать ошибки, ни просто его время расходуется на практически совершенно тупые по своей сути действия. Но &lt;a href="http://www.pragprog.com/the-pragmatic-programmer"&gt;прагматичные программисты&lt;/a&gt; понимают, что с этим надо бороться и провозглашают одним из основых принципов - &lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY&lt;/a&gt;, т.е. &lt;span style="font-weight: bold;"&gt;D&lt;/span&gt;on't &lt;span style="font-weight: bold;"&gt;R&lt;/span&gt;epeat &lt;span style="font-weight: bold;"&gt;Y&lt;/span&gt;ourself (кстати в вышеуказанной книге этому посвящена глава 2.1 &lt;span style="font-style: italic;"&gt;The Evils of Duplication&lt;/span&gt;). И авторы Django с этим вполне солидарны.&lt;br /&gt;Скажем, меня всегда утомляло дублирование разных аспектов обработки форм:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;для начала надо иметь html, который будет их отображать;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;потом надо обработать информацию, полученную как результат POST-запроса, в частности сделать валидацию;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;проверенные данные надо "запихать" в БД;&lt;/li&gt;&lt;li&gt;если валидация данных не была успешна, то надо отобразить снова ту же форму, сохранив данные, которые были введены пользователем.&lt;/li&gt;&lt;/ul&gt;Кроме этого можно ещё упомянуть обобщённые виды (generic views), переиспользуемые приложения (как в составе самого фреймворка, так и большое количество сторонних), блоки и тэги для шаблонов и, наверное, это ещё не всё.&lt;br /&gt;Ну и, я уверен, тут не обошлось без влияния &lt;a href="http://www.python.org/dev/peps/pep-0020/"&gt;The Zen Of Python&lt;/a&gt; :)&lt;br /&gt;В целом, если Вы хотите автоматизировать нудные типовые задачи вебразработки и больше времени посвятить сути вашег крутого сайта, то Django может оказать Вам в этом неплохую помощь.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-5534723209115441478?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/5534723209115441478/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/03/django_25.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5534723209115441478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5534723209115441478'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/03/django_25.html' title='Метод избавления от рутинных задач в Django'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-8804034489294909486</id><published>2009-03-24T18:40:00.002+03:00</published><updated>2009-03-24T18:58:05.382+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Русские ресурсы о Django</title><content type='html'>Ресурсов на русском языке, посвящённых Django, не так уж и много. Есть перевод на русский &lt;a href="http://cargo.caml.ru/djangobook/"&gt;Djangobook&lt;/a&gt;, правда он для старой версиии книги, которая основана Django 0.96. Есть &lt;a href="http://apicom.org.ua/django/"&gt;попытка перевести официальную документацию&lt;/a&gt; при помощи коллективного разума. Успехов там, правда не так чтобы много...&lt;br /&gt;Есть ещё &lt;a href="http://groups.google.ru/group/django-ru"&gt;гугловская группа&lt;/a&gt;, не очень активная, несколько блогов и это, наверное, всё.&lt;br /&gt;Можно лишь вспомнить о том, что нормальный программист просто обязан знать английский язык, иначе получать новые знания становится ну очень тяжко.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-8804034489294909486?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/8804034489294909486/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/03/django.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8804034489294909486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/8804034489294909486'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/03/django.html' title='Русские ресурсы о Django'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-5302016095288701575</id><published>2009-03-23T23:16:00.001+03:00</published><updated>2009-04-07T23:22:40.899+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='видео'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Отличные касты</title><content type='html'>Не зря говорят "лучше 1 раз увидеть чем 100 раз услышать". Поэтому на меня произвели довольно сильное впечатления &lt;a href="http://showmedo.com/videos/series?name=PPN7NA155"&gt;скринкасты&lt;/a&gt; от Эрика Флоренцано, в которых на живом примере показано создание приложения на Django. Лучше, конечно, не просто смотреть касты, но и опробовать всё это своими руками, включив заодно и моторную память.&lt;br /&gt;Жалко, правда, что серия не совсем закончена: в 13-м эпизоде Эрик упоминает, что в 14-м он расскажет об использовании &lt;a href="http://www.nongnu.org/fab/"&gt;Fabric&lt;/a&gt; для развёртывания приложений на Django, но эпизода пока так и нет.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-5302016095288701575?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/5302016095288701575/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/03/blog-post_23.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5302016095288701575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/5302016095288701575'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/03/blog-post_23.html' title='Отличные касты'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-2960817594090874804</id><published>2009-03-23T17:23:00.000+03:00</published><updated>2009-03-23T17:40:45.331+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP → Django</title><content type='html'>По поводу миграции с PHP есть довольно интересный &lt;a href="http://www.harbott.com/2009/03/11/php-to-django/"&gt;пост&lt;/a&gt;. Хочу тоже как автор того поста спустя некоторое время сказать &lt;span style="font-style: italic;"&gt;I cannot imagine going back to PHP &lt;/span&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-2960817594090874804?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/2960817594090874804/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/03/php-django.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2960817594090874804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2960817594090874804'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/03/php-django.html' title='PHP → Django'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7834466361812067478.post-2295782048186286516</id><published>2009-03-23T17:08:00.000+03:00</published><updated>2009-03-23T17:40:45.332+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Лиха беда начало</title><content type='html'>Итак, PHP за последние месяцы успел очень изрядно утомить своими "прелестями". Посмотрев несколько по сторонам, решил взяться за &lt;a href="http://djangoproject.com/"&gt;Django&lt;/a&gt; - первые впечатления очень даже положительные.&lt;br /&gt;Сначала, правда, хотелось попробовать решения на Erlang или Haskell, но userbase у них заметно меньше, соответственно подводных камней потенциально заметно больше, а хочется именно рабочее опробированное решение, чтоб не приходилось "на каждый чих" писать свою реализацию по сути дела стандартных вещей.&lt;br /&gt;Интересные ссылки, мысли и прочее, что будет появляться по мере вникания во фремворк, буду публиковать  здесь. Хотябы просто для истории, а, может быть, это поможет кому-то ещё.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7834466361812067478-2295782048186286516?l=django-newbie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://django-newbie.blogspot.com/feeds/2295782048186286516/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://django-newbie.blogspot.com/2009/03/blog-post.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2295782048186286516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7834466361812067478/posts/default/2295782048186286516'/><link rel='alternate' type='text/html' href='http://django-newbie.blogspot.com/2009/03/blog-post.html' title='Лиха беда начало'/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_CmcKoj9unS4/SduoxQt0oNI/AAAAAAAAAg8/fLkQA93v2wU/S220/upic.jpg'/></author><thr:total>4</thr:total></entry></feed>
