IT Блог

Документации и переводы

Статьи на технические темы

uWSGI Error Python application not found

Когда возникает такая ошибка, проверьте, что показывают логи uwsgi.

Возможно, что не все требуемые зависимости установлены.


Unable to get repr for <class 'django.db.models.query.QuerySet'>. Поиск по тегам в плагинах django

Захотелось мне реализовать поиск картинок по названию тега (Картинка - это мною написанный django-cms плагин; а теги - подключённое приложение taggit), но не тут-то было. Впрочем, всё по-порядку.

Во-первых, имеем модель:

# models.py
class Picture(CMSPlugin):
    pic = models.ImageField(u'Картинка', upload_to='pictures', max_length=255)
    tags = TaggableManager(blank=True)

А во-вторых, нужно найти картинки по необходимому тегу. И если мы захотим осуществить поиск как-то так:

pictures = Picture.objects.filter(placeholder__page__publisher_is_draft=True).filter(tags__name=search_value)  

то ничего не выйдет. Не сработает: Django сообщит Unable to get repr for <class 'django.db.models.query.QuerySet'>.

Скажу честно, я так и не смог понять...


Сохранение тегов (taggit) при публикации страницы в django-cms

В документации по taggit имеется пример сохранения тегов через форму, но нет примера сохранения в модели (например, для плагина django-cms)... Но это и понятно. Сохранение связи многие-ко-многим происходит обычным образом (в django документации есть хорошие примеры). Я лишь покажу, как сохранить теги при публикации страницы в django-cms.

Копирование связей происходит в методе copy_relations(self, old_instance), например:

# models.py
class Picture(CMSPlugin):
    pic = models.ImageField('Картинка', upload_to='pictures', max_length=255)
    tags = TaggableManager(blank=True)

   def copy_relations(self, old_instance):
        self.tags.clear()
        for tag in old_instance.tags.all():
            self.tags.add(tag.name)

        self.save()

Для сохранения формы в views.py пишем...


Миграции не создаются, ошибка dependencies references nonexistent parent node

Иногда у меня не создаются миграции. Обычно нужно сделать так: для того чтобы создавались миграции, в нужном приложении необходимо создать папку migrations (и положить туда __init__.py). И не забыть прописать приложение в settings.py. И тогда при вызове команды python manage.py makemigrations создадутся миграции.

Но что делать, когда возникает ошибка dependencies references nonexistent parent node? Подробнее на примере.

У меня возникла эта ошибка, когда я поставил taggit (приложение, позволяющее прикручивать теги к объектам) и по-инерции прописал в settings.py следующее:

MIGRATION_MODULES = {
    'cms': 'cms.migrations_django',
    'menus': 'menus.migrations_django',
    'djangocms_text_ckeditor': 'djangocms_text_ckeditor.migrations_django',
    'taggit': 'taggit.south_migrations',
}

Как написано в документации Django...


ValueError: invalid literal for int() with base 10

Если у вас не сохраняются картинки на сайте или если при публикации страницы или копировании плагинов django-cms трейсбек выдаёт что-то подобное:

ValueError: invalid literal for int() with base 10: '1/ru/publish/template/css/base.css'

Или

OSError: [Errno 13] Permission denied: '/home/path/to/media/'

это значит, что не достаточно прав на выполнение операции. Обычно права на папку media принадлежат пользователю www-data, поэтому перейдите в терминале в папку, где лежит media, и наберите:

$ chown -R www-data:www-data media/

str to unicode python

Хороший пример наглядно почувствовать преобразование str в unicode и обратно:

'test'.decode('utf-8')  # str to unicode - u'test' 
'test'.encode('utf-8')  # unicode to str - 'test'

Или

'Äîáðî ïîæàëîâàòü'.decode('windows-1251')  # str to unicode - u'Добро пожаловать' 

Что такое доменное имя и хостинг и зачем они нужны?

Каждый сайт имеет не только свой уникальный адрес, но ещё и хостинг. И мои клиенты часто меня спрашивают, что это и зачем это надо, поэтому я решил по-простому объяснить эти вещи.

Доменное имя (или домен) - это адрес сайта, например: мой-сайт.рф, my-site.ru и т. д.

А хостинг - это расположение кода сайта. По-другому, это компьютер-сервер, который постоянно включен для обеспечения доступа к сайту в вашем браузере.

Проведу некоторую аналогию. Например, вы хотите построить дом! Для этого нанимаете строителей, чтобы его построить, а для сайта - это программистов и дизайнеров веб-студии. После постройки дома начинается оплата за землю. То есть за то...


django преобразование или экранирование символов на спецсимволы в HTML

Пример преобразования (экранирования) небезопасных символов (", <, > и т.д.) в python-коде:

from django.utils.html import escape  # Эта функция и преобразует символы ", <, > и т.д. в безопасные символы

def get_link(obj):
    title = u' title="{}"'.format(escape(obj.title))
    return safe(u'<a href="{0}"{1}>{1}</a>'.format(obj.link, title))

Как сгруппировать/изменить порядок отображения плагинов в меню django-cms

Я пока не нашёл способов изменить порядок отображения плагинов в меню заполнителя при добавлении плагина. Они упорядочены по алфавиту и могут быть сгруппированны. Для этого нужно добавить параметр module при описании плагина в cms_plugins.py. Например:

class TestPlugin(CMSPluginBase):
    module = 'Test module'
    render_template = 'test_plugin.html'
    name = 'Тестовый плагин'
    model = TestModel

Отключить тачпад в linux

На линуксе минте 17.1 можно сделать следующим образом:

1. Зайти в "Меню -> Параметры -> Мышь" и включить пункт "Запретить сенсорную панель на время набора текста".

2. Если вы хотите полностью отключить тачпал, то установите пакет gpointing-device-settings.

$ sudo apt-get install gpointing-device-settings

После этого в "Меню -> Параметры" появится новый пункт под названием Pointing Devices. В этом приложении можно полностью отключить тачпад. Также это приложение содержит кучу других полезных настроек.

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц