Публикую очередную шпаргалку для django 1.4. Скачать шпаркалку — django-1.4-cheatsheet
метка: Python
TinyMCE для Django
Прикручиваем tinymce к django. Я случайно наткнулся на такое исполнение прикручивания tinymce к django.
1. Создаем в папке проекта папку wysiwyg, а в ней файл __init__.py (код которого приведен ниже)
#!/usr/bin/python
# -*- encoding: utf-8 -*-
from django.db.models import Field
from django.forms import Textarea
from settings import MEDIA_URL
class WidgetWYSIWYG(Textarea):
def __init__(self, *args, **kwargs):
super(WidgetWYSIWYG, self).__init__(attrs={'class': 'wysiwygEditor vLargeTextField'}, *args, **kwargs)
class Media:
js = (
MEDIA_URL+'common/tiny_mce/tiny_mce.js',
MEDIA_URL+'common/filebrowser/js/TinyMCEAdmin.js',
)
class WYSIWYGField(Field):
def get_internal_type(self):
return "TextField"
def formfield(self, **kwargs):
defaults = {'widget': WidgetWYSIWYG}
defaults.update(kwargs)
return super(WYSIWYGField, self).formfield(**defaults)
2. Теперь мы можем создать свою модель и вместо поля models.TextField использовать WYSIWYGField. Смотрим код models.py ниже.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from django.db import models
import datetime
from wysiwyg import WYSIWYGField
# Create your models here.
class News(models.Model):
"""
Новости
"""
publish = models.BooleanField(verbose_name=u"Опубликовать", default=True)
created = models.DateField(verbose_name=u"Дата", default=datetime.date.today)
title = models.CharField(verbose_name=u"Заголовок", max_length=250)
preview = models.TextField(verbose_name=u"Краткое описание")
text = WYSIWYGField(verbose_name=u"Текст")
def __unicode__(self):
return self.title
class Meta:
ordering = ('-created',)
verbose_name = u"Новость"
verbose_name_plural = u"Новости"
Python морфология строки от числа
class Morphology:
def getNLastDigit(self, n, number):
return divmod(number, 10**n)[1]
def formParticipant(number):
morf = Morphology()
lastDigit = morf.getNLastDigit(1, number)
twoLastDigit = morf.getNLastDigit(2, number)
if ((5 < twoLastDigit < 15) | (lastDigit in [5, 6, 7, 8, 9, 0])):
return str("товаров")
elif (lastDigit == 1):
return str("товар")
elif(lastDigit in [2, 3, 4]):
return str("товара")
formParticipant = staticmethod(formParticipant)
Использование Mod_wsgi с Django на Ubuntu с Apache
Ставим mod_wsgi
sudo apt-get install libapache2-mod-wsgi
Конфигурации виртуального хоста:
<VirtualHost *:80>
ServerAdmin i@developtolive.com
ServerName developtolive.com
DocumentRoot /home/www
# Django settings
WSGIScriptAlias / /home/www/django_apps/developtolive_com/wsgi_handler.py
WSGIDaemonProcess developtolive_com user=you group=you processes=1 threads=10
WSGIProcessGroup developtolive_com
# Non-Django directories
Alias /static /home/www/django_apps/developtolive_com/static
<Location "/static">
SetHandler None
</Location>
# Non-Django directories
Alias /media /home/www/django_apps/developtolive_com/media
<Location "/media">
SetHandler None
</Location>
</VirtualHost>
Поместите файл с именем wsgi_handler.py в папке проекта:
import os, sys sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') os.environ['DJANGO_SETTINGS_MODULE'] = 'developtolive_com.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
Набор полезных regexp’ов для python
Определение валидности e-mail
Набившая всем оскомину задача. Есть мнение, что правильный regexp, понимающий точку в имени пользователя, должен выглядеть так:
re.compile(
r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*"
r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"'
r')@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$'
, re.IGNORECASE)
Определение валидности http url
Здесь присутствуют проверки на протокол (http/https), допуск localhost в качестве домена, возможность указания ip адреса вместо домена, а также опциональный порт сервиса
url_re = re.compile(
r'^https?://'
r'(?:(?:[A-Z0-9-]+\.)+[A-Z]{2,6}|'
r'localhost|'
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
r'(?::\d+)?'
r'(?:/?|/\S+)$',
re.IGNORECASE)
проблема в mod_python3 с md5
Как я писал не так давно о том что питон переместил библиотеку md5 в другой пакет, но вот только не все разработчики ПО это приняли во внимание. Очередное столкновение у меня возникло с этой проблемой. В ПО под название mod_python3 как раз таки такая ситуация. Пакет вроде как последней версии mod_python3.1 но все же бага там есть и логи наполняются ошибками.
Проблему пока что можно решить только редактированием файла importer.py
Вот как логируется ошибка:
[Fri Aug 14 10:16:51 2011] [error] /usr/local/lib/python2.6/site-packages/mod_python/importer.py:32: DeprecationWarning: the md5 module is deprecated; use hashlib instead [Fri Aug 14 10:16:51 2011] [error] import md5
Лечим:
32 строка: import md5 меняем на from hashlib import md5
972 строка return self._prefix + md5.new(file).hexdigest() меняем на return self._prefix + md5(file).hexdigest()
md5 в python
Тут как то на днях перенес один проект с django на новый сервер и оказывается=) md5 в python перенес в другой пакет и тема import md5 больше не прокатит =), а мигрировал он в пакет hashlib. Теперь пользуемся радостью md5 шифрование таким способом:
In [1]: import hashlib In [2]: str_h = 'My hesh' In [3]: hsh = hashlib.md5() In [4]: hsh.update(str_h) In [5]: hsh.hexdigest() Out[5]: 'd9736cbf27ba07b8df5d98883d364231'
ImageField и JPG(JPEG) изображение в Django
Кто то как и я столкнулся с такой проблемой, как загрузка изображений в django, но модель ImageField ругается на jpg изображения с криками, что это вовсе не изображение. Для лечения подобного поведения необходим пакет python-devel. Во всех системах он называется по разному а в некоторых он вовсе не поддерживается. В ubuntu он так и называется python-devel, а где то он зовется python-dev, во freebsd он звучит просто по наркомански=) можете сами убедиться make search. Но самое главное все это лечится.
Коры в django шаблоне
В одном из сайтов попросили внести некие изменения. Сайт работает на Django. По ходу работы открываю шаблон и наблюдаю просто веселую картину. Вот кусок того шаблона:
{% extends "base.html" %}
{% block title %}
<title>«{{ name_site }}» | Каталог продукции</title>
{% endblock %}
{% block main_content %}
<div id="content" class="catalog">
<? @echo 'lalalal' ?>
<div id="right_column">
<table>
<tr><td><a href="/media/upload/price.doc"><img src="/media/images/icon_download.gif?050509" alt="скачать"/></a></td><td><a href="/media/upload/price.doc?1" class="black"><b>Скачать прайс-лист</b></a></td></tr>
<tr><td> </td><td><span class="grey">81 КБ, 01.04.2011</span></td></tr>
</table>
<div id="tara"><a href="/tara/">Тара</a></div>
<div class="new_product">
<div class="np_title">Новинки</div>
Если кто то еще не понял, то смотрим на 9 строку.
django учитывать перевод строки
Опять отписываю в рубрику «Мои поисковые запросы» =) вот и придумал название ему.
Пришел ко мне еще такой вот поисковый запрос «django учитывать перевод строки»: есть два шаблонных тега Вам в помощь
linebreaks
Заменяет символы перевода строки в обычном тексте подходяцими html тегами. Одиночным символ перевода строки BR А символ перевода строки за которой идет пустая строка заменяет тегом P
linebreaksbr
Заменят еревод строк тегом BR