Закрыть

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

Цитата дня

Vivazzi.ru

Личный сайт Мальцева Артема

Вежливость — это такое качество человеческой натуры, которое помогает не замечать поломанной калитки, но обращать внимание на цветы за этой калиткой.

Дейл Карнеги

IT Блог

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

Использование ifchange вместо regroup

Шаблонный тег regroup хорош для группировки выводимых данных в шаблоне. Но не менее полезен похожий шаблонный тег ifchange, который будет выводить содержимое, если входящий параметр отличается от предыдущего в цикле. Для меня его использование легче запоминается.

Реальный пример кода одного моего проекта :

{% for product in products %}
{% ifchanged product.diameter %}<h2>R{{ product.diameter }}</h2>{% endifchanged %}
<div class="item">
<div class="t">{{ product.get_title }}</div>
<p>Размер: {{ variant.get_size }}</p>
<p>Цена: {{ variant.get_state }}</p>
<p>Стоимость: {{ variant.get_price_html }}</p>
</div>
{% endfor %}

Объекты products - это автомобильные шины. Чтобы легче было находить нужный размер, шины должны быть сгруппированы...


bleach linkify Оборачивание localhost:8000

bleach linkify() пока, к сожалению, не умеет оборачивать ссылки локалхоста типа localhost:8000, но можно написать небольшой workaround, суть которого заключается в следующем: мы заменяем localhost:8000 на какой-нибудь несуществующий сайт, напр. dummy_site.ru, затем применяем linkify() и в заключении возвращаем localhost:8000. Вот небольшой реальный пример:

class Log(models.Model):
content = models.TextField('Содержание лога')

def get_content(self):
def set_target(attrs, new=False):
attrs['target'] = '_blank'
return attrs

content = '{}'.format(self.content.replace('\n', '<br/>'))

# workaround to allow linkify localhost:8000
content = content.replace('localhost:8000', 'dummy_site.ru')
content = linkify(content, callbacks=[set_target, ])
content = content.replace('dummy_site.ru...


Failed to establish a new connection: [Errno 111] Connection refused

Достаточно непросто сразу понять почему возникла ошибка Failed to establish a new connection: [Errno 111] Connection refused. В моём случае просто не хватило памяти для построения индекса. Соответственно, можно оптимизировать потребление памяти или увеличить ресурсы сервера.

Также может быть просто не запущен сервер elasticsearch. В этом случае можно воспользоваться командой service elasticsearch start.

Можно попробовать рестартнуть elasticsearch: service elasticsearch restart.

Также убедитесь, что вы добавили elasticsearch на автозагрузку (как это сделать на странице: )

Если не помогло, то уже можно смотреть конфиг /etc/elasticsearch/elasticsearch.yml. Опции не буду приводить: их много - можно почитать на официальном сайте:


django.core.urlresolvers.NoReverseMatch: Reverse for 'pages-details-by-slug'

Ошибка django.core.urlresolvers.NoReverseMatch: Reverse for 'pages-details-by-slug' может возникнуть при выполнении метода get_absolute_url() экземпляра класса Page из management команды. Дело в том, что когда вызывается management команда, page ничего не знает об используемом языке (language) и валится в следующем куске кода:

def get_absolute_url(self, language=None, fallback=True):
if not language:
language = get_language() # автоматически не удаётся определить language
with i18n.force_language(language):
if self.is_home:
return reverse('pages-root')
path = self.get_path(language, fallback) or self.get_slug(language, fallback)
return reverse('pages-details-by-slug', kwargs={"slug": path}) # и происходит ошибка, так как path не определился

Пример того, как можно установить язык:

# -*- coding...


Не работает {% page_url %} в django cms

Когда перестаёт работать какой-нибудь django-cms тег (например {% page_url %}), проверьте передали ли вы context при рендере шаблона. Эту ошибку я описывал в статье . В ней эта ошибка более подробно расписана, и, чтобы не повторяться, я просто приведу пример правильного использования context для того, чтобы заработал рендер шаблона:

@register.inclusion_tag('quote.html', takes_context=True)
def get_quote(context):
context['quote'] = Quote.objects.last()
return context

И сам шаблончик quote.html:

{% load cms_tags %}

<blockquote>
<p>{{ quote.text|linebreaksbr }}</p>

{% page_url 'quote-authors' as quote_authors_url %}
{% if quote_authors_url %}<a href="{{ quote_authors_url }}" class="author">{{ quote.author }}</a>
{% else %}<p class="author">{{ quote.author }}<...


You must enable the 'sekizai.context_processors.sekizai'

Бывает странно видеть ошибку:

TemplateSyntaxError: You must enable the 'sekizai.context_processors.sekizai' template context processor or use 'sekizai.context.SekizaiContext' to render your templates.

, хотя и подключен context_processors:

TEMPLATES = [
{
'OPTIONS': {
'context_processors': [
...
'sekizai.context_processors.sekizai',
]
},
},
]

Такое может происходить, когда вы пытаетесь срендерить шаблон, в котором используются sekizai-теги, но не передали context, например, при использовании inclusion_tag. На этом этапе странность и пропадает - ведь действительно, sekizai нужен context.

Как вариант, можно использовать следующий пример включающего тега:

@register.inclusion_tag('quote.html', takes_context=True)
def get_quote(context):
context['quote'] = Quote.objects.last()
return context

takes_context=True - передаёт context в наш inclusion_tag, что позволяет нам расширить...


AppRegistryNotReady: Apps aren't loaded yet

Здесь буду приводить случаи, когда может возникнуть ошибка:

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

1. Причина в django-reversion

Если в проекте используется django-reversion, то версия пакета должна быть django-reversion>=1.10.0


Error fetching command 'graph_transitions': No module named graphviz

Попробуем исправить ошибку Error fetching command 'graph_transitions': No module named graphviz. Для запуска пакета graphviz нам нужен setuptools:

pip install setuptools

Теперь попробуйте снова поставить пакет pygraphviz командой pip install pygraphviz. Если появляется новая ошибка вроде этой:

running install
Trying pkg-config
Package libcgraph was not found in the pkg-config search path.
Perhaps you should add the directory containing `libcgraph.pc' to the PKG_CONFIG_PATH environment variable
No package 'libcgraph' found
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-ojXrMb/pygraphviz/setup.py", line 87, in <module>
tests_require=['nose>=0.10.1', 'doctest-ignore-unicode>=0.1.0',],
....
subprocess...


Подключение wi-fi адаптера WN727N на Linux. Установка драйвера Ralink MT7601

Вот и закончилась моя борьба по подключению wi-fi адаптера WN727N на Linux. Итог - победа :) Что я только не пробовал, чтобы установить драйвер Ralink MT7601, который нужен для работоспособности wi-fi адаптера WN727N в моём случае - всё бесполезно, ничего не получалось. В итоге прочитал, что wi-fi адаптер стабильно работает на Linux с версией ядра 4.2 и выше, так как содержит драйвер Ralink MT7601 в своём составе. Поэтому, если вы не особо разбираетесь в том, как обновить ядро Линукса до нужной версии или как запустить этот драйвер на более старых версиях ядра, то просто переустановите Линукс.

Буквально несколько минут назад я установил...


Вам нужно саморазвиваться или вы хотите зарабатывать деньги?

Или вы ищите хорошие IT сервисы или книги? Сохраните свое время и взгляните на мою подборку рекомендаций, которыми постоянно пользуюсь.
Посмотреть рекомендации

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

Попробуйте