Показаны сообщения с ярлыком кодинг. Показать все сообщения
Показаны сообщения с ярлыком кодинг. Показать все сообщения

понедельник, 9 июля 2012 г.

Python: for-else

А вы в знали про for-else в Python? Я до недавнего времени не знал, поэтому подобный код вогнал меня в ступор:

вторник, 12 июня 2012 г.

Funny Python

Хотите улыбнуться? Запустите интерпретатор python и наберите import antigravity :)

четверг, 8 декабря 2011 г.

Django, filebrowser: Caught ImportError while rendering: No module named urls

При использовании django-filebrowser
Ошибка:

Caught ImportError while rendering: No module named urls
ADMIN_URL = "{% url 'admin:index' %}",
 
Во-первых, новый django-filebrowser требует staticfiles
Во-вторых, проверьте urls.py: filebrowser должен подключаться так:
 
 from filebrowser.sites import site
...
(r'^admin/filebrowser/', include(site.urls)),

Обратите внимание, что тут именно (site.urls), а не ('site.urls').

четверг, 3 ноября 2011 г.

Django - страницы простым текстом. Django - plain text in response.

Когда я решил сделать своему сайту файлик humans.txt, я заметил, что даже если шаблон содержит только текст, джанга все-равно обрамляет его базовыми html-тегами. А мне надо было, чтобы Django отдавал обычный текст. Задача не велика и решилась просто, но вдруг кому поможет:

воскресенье, 30 октября 2011 г.

Пост ненависти к кривому софту

Виндой я пользуюсь редко, но иногда приходится, так что не удивляйтесь. Все началось с того, я установил какую-то программу и не заметил, что она установила в Firefox плагин Mail.ru, который разумеется сделал поиском по умолчанию свой тупой, мерзкий, убогий, ненавистный поисковик. Я имею в виду не тот поисковик, который в лисе можно выбрать из выпадающего списка, а тот, в котором лиса начинает искать фразу, которую вводишь в адресную строку. Плагин я удалил, но после перезапуска тупой, мерзкий, убогий, ненавистный поисковик mail.ru никуда не делся, поэтому пришлось гуглить, лезть в about:config и там руками все возвращать на место. Не знаю, может быть для пользователей винды это обычное дело, но меня жутко бесит, когда каждая сопля пытается изменить параметры моего браузера, навязать мне свою домашнюю страничку и заменить поисковик, выбранный мною, своим.

четверг, 27 октября 2011 г.

Django remove www. Django mod_rewrite. .htaccess in Django

Сразу оговорюсь, что про mod_rewrite и .htaccess я рассказывать не буду. Такой заголовок я сделал для поисковиков, т.к. для решения своей проблемы я гуглил примерно по таким запросам, прежде, чем понял, что нужно делать.

вторник, 4 октября 2011 г.

Python. Удалить html-теги из текста

Если нужно просто подчистить текст от всех тегов (т.е. убрать все, что содержится в угловых скобках), то это можно сделать так:

>>> import re
>>> html = '<b>Hello</b> and <a href="">bye</a>'
>>> p = re.compile(r'<.*?>')
>>> p.sub('', html)
'Hello and bye'
>>>


А если, например, надо удалить все ссылки вместе с текстом, то подойдет следующее решение:

вторник, 20 сентября 2011 г.

Добавляем свои кнопки в админку Django

Есть у меня такая привычка - редактировать html-код вручную. При написании новых статей на своем сайте я всегда делал разметку вручную, но однажды решил попробовать wysiwyg-редактор tinymce. Это хороший редактор, но мне он не подошел. Он делал много лишнего и не делал кое-чего нужного. Я не буду расписывать причины, по которым я от него отказался, т.к. это заняло бы слишком много места. Скажу лучше, как добавить в админку django несколько своих кнопок и повесить на них простые действия - обрамление выделенного текста в html-теги. Впрочем, вместо кнопок можно добавить все, что угодно.

вторник, 9 августа 2011 г.

Django, BBCode, работа с BB-кодами, неизвестные теги

В Python есть такой модуль - postmarkup, который нужен для работы с BB-кодами. BB-коды в свою очередь нужны для безопасной работы с html-тегами.

На моем сайте посетители часто оставляют комментарии, содержащие код (bash, python и тд). До недавнего времени всем приходилось в строгом порядке использовать тег [code] при публикации кода, т.к. без этого тега плагин postmarkup видел в куске кода что-нибудь вроде if [ "Q" == "Q" ] then , принимал это за кривой BB-тег и удалял [ "Q" == "Q" ], оставляя лишь "if then". У меня стояла последняя версия postmarkup 1.1.4, вышедшая в 2008-м году.

Но недавно случилось счастье: я обнаружил, что если получить trunk postmarkup ( svn checkout http://postmarkup.googlecode.com/svn/trunk/ postmarkup-read-only ), то в коде postmarkup.py можно обнаружить новую опцию: render_unknown_tags , которая позволяет не удалять неизвестные BB-коды, а, экранируя, выводить их как обычный текст.


Чтобы было понятней, покажу, как postmarkup работал раньше:

понедельник, 25 июля 2011 г.

scrot: giblib error: Saving to file foo.png failed

Проблема:
Не работает утилита scrot ( giblib error: Saving to file foo.png failed ).

Решение:
Библиотека imlib2 должна быть собрана с поддержкой png.

пятница, 17 июня 2011 г.

Django. Добавление ссылки в админку

Имеем: django, grappelli, tinymce и файловый браузер. Файловый браузер доступен по /admin/filebrowser/browse/. Чтобы не вводить каждый раз руками, само собой, захотелось добавить ссылку на файловый менеджер в админку Django.

Честно говоря, уже не помню, какой способ предлагали использовать в официальной документации, помню только, что он не работал =) В Интернете советуют скопировать файл index.html (и потом в него уже вносить изменения) из каталога django/contrib/admin/templates в каталог admin, который перед этим надо создать в каталоге с шаблонами.

Этот способ работает, но если у вас используется grappelli, то после копирования index.html админка будет выглядеть убого.  Так вот в таком случае index.html надо брать не из джанги, а из grappelli. В моем случае это выглядит так:
cp ~/myenv/lib/python2.6/site-packages/django_grappelli-2.3.2-py2.6.egg/grappelli/templates/admin/index.html templates/admin/
Теперь в этот файл вручную можно добавить пару нужных ссылок.
Прямо перед этими строками
{% else %}
{% trans "You don´t have permission to edit anything." %}
{% endif %}
Я добавил вот что:
        <!-- СВОИ ССЫЛКИ -->
        <div class="module">
        <h2>Дополнительные ссылки:</h2>
        <div class="row">
        <a href="filebrowser/browse/">Файловый менеджер</a>
        <ul class="actions">
        </ul>
        </div>
        </div>
Способ, возможно, не самый красивый, зато работает ;)

воскресенье, 5 июня 2011 г.

Цветной вывод в Python

Недавно я решил переписать несколько своих bash-скриптов на Python и столкнулся с задачей - как заставить Python раскрашивать текст? Способов несколько, в том числе будет работать и способ, применяемый в bash для раскраски текста, но удобнее будет использовать готовый модуль.

Модуль называется termcolor и лежит тут . Пример использования:

>>> from termcolor import colored
>>> print(colored('hello', 'red'))
hello
>>> print(colored('hello', 'green', 'on_blue'))
hello
>>> print(colored('hello', 'blue', 'on_white'))
hello

среда, 18 мая 2011 г.

Django, Python и Virtualenv на хостинге

Представим такую ситуацию. Имеется хостинг с поддержкой Python/Django, но в имеющемся пайтоне нет нужных модулей, а версия Django не достаточно свежая. В таком случае можно установить свою версию Python в свой домашний каталог с помощью Virtualenv и в него уже устанавливать Django и все необходимые модули. Показывать буду на примере хостинга locum.ru (отличный хостинг, кстати).

В первую очередь надо установить virtualenv. Скачать ее можно отсюда http://pypi.python.org/pypi/virtualenv . Скачанный архив распаковываем, переходим в него и делаем $ python virtualenv.py ~/myenv . В результате создастся каталог ~/myenv, в который и будут устанавливаться модули пайтона и Django.

Для активации virtualenv нужно выполнить следующую команду: $ source ~/myenv/bin/activate . Добавьте эту команду в ~/.bashrc. Теперь команда $ which python должна вывести что-то похожее на "/home/accountname/myenv/bin/python". Если все так, то можете скачивать и устанавливать модули и все необходимое (модули будут установлены в каталог ~/myenv/lib/python-2.6/site-packages/).

Проверить версию свежеустановленного Django можно так:

 $ python
Python 2.6.6 (r266:84292, Oct  9 2010, 12:24:52)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.get_version()
'1.3'
>>>



В своем аккаунте на locum.ru создаете новый проект (назовем его test1), в каталоге ~/projects создастся каталог test1 с пустым джанго-проектом. Этот каталог можно сразу удалить и командой django-admin startproject test1 создать новый. Теперь, чтобы все заработало, в каталоге с новым проектом надо создать файл django.wsgi с таким содержанием:
#!/home/имя-аккаунта/myenv/bin/python
# -*- coding: utf-8 -*-
activate_this = '/home/имя-аккаунта/myenv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
import os
import sys
sys.path.insert(0, os.path.dirname(__file__))
sys.path.insert(0, '/home/имя-аккаунта/myenv/lib/python2.6/site-packages/django')
sys.path.insert(0, '/home/имя-аккаунта/projects/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'test1.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

среда, 7 июля 2010 г.

CSRF verification failed. Request aborted. Ошибки после обновления Django.

Сегодня обнаружил еще одну проблему, появившуюся после обновления Django до 1.2 - при попытке загрузки файла, джанго пишет ошибку "CSRF verification failed. Request aborted". Как выяснилось, CSRF - один из механизмов защиты от особых атак (подробнее тут ). Теперь нужно использовать тег {% csrf_token %} внутри каждой POST формы и добавить 'django.middleware.csrf.CsrfViewMiddleware', в MIDDLEWARE_CLASSES в файле settings.py. Например, так это выглядит у меня:

settings.py:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',

'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
)

пятница, 2 июля 2010 г.

Обновил Django с 1.1 до 1.2

В Django 1.2 модуль email_re теперь надо импортировать по-другому - from django.core.validators import email_re. Старый вариант был такой: from django.forms.fields import email_re


Так что, если у вас после обновления Django вылазит такое:
ImportError: cannot import name email_re
то решение проблемы я вам уже подсказал :)