IT Блог

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

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

Hide warning in PyCharm

Предупреждение might be referenced before assignment

Использовать # noinspection PyUnboundLocalVariable, например:

def get_rate(self, rates, amount):
    for rate_item in rates:
        if amount <= rate_item.amount:
            return rate_item.rate

    # noinspection PyUnboundLocalVariable
    return rate_item.rate

Предупреждение unexpected argument

Использовать # noinspection PyArgumentList, например:

# noinspection PyArgumentList
product = Cloth(product_name='title',product_code='xxx', unit_price=120)

Доступные указания для скрытия предупреждения в PyCharm

Перед строчкой с предупреждением нужно написать # noinspection [Идентификатор предупреждения].

# noinspection PyAbstractClass
# noinspection PyArgumentEqualDefault
# noinspection PyArgumentList  # unexpected argument
# noinspection PyAssignmentToLoopOrWithParameter
# noinspection PyAttributeOutsideInit
# noinspection PyAugmentAssignment
# noinspection PyBroadException
# noinspection PyByteLiteral
# noinspection PyCallByClass
# noinspection PyCallingNonCallable
# noinspection PyChainedComparisons
# noinspection PyClassHasNoInit
# noinspection PyClassicStyleClass
# noinspection PyComparisonWithNone
# noinspection PyCompatibility
# noinspection PyDecorator
# noinspection...

NoReverseMatch: Reverse with arguments and keyword arguments '{}' not found. 0 pattern(s) tried: []

Периодически получаю ошибку подобного плана:

NoReverseMatch: Reverse for 'my_url_name' with arguments '(u'...',)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

И не сразу врубаюсь почему не работает. Вот и решил записать шпаргалочку. Проверить:

1. Включён ли urls.py приложения в корневой urls.py

urlpatterns = patterns('',
    ...
    url(r'^my_app/', include('my_app.urls')),
    ...
)

2. Прописан ли url в urls.py приложения:

urlpatterns = patterns('',
    url(r'^my-url-name/(?P<my_object_id>\d+)/$', my_app.views.my_view, name='my_url_name'),
)

3. Добавлены ли необходимые аргументы в urls.py

urlpatterns = patterns('',
    url(r'^my-url-name/(?P<my_object_id>\d+)/$', my_app.views.my_view, name='my_url_name'),
)

4. Добавлены ли необходимые аргументы при вызове функции...


InvalidBasesError: Cannot resolve bases for [<ModelState: 'cms.PageUser'>]

Довольно-таки необычная может возникнуть ошибка при попытке создать первую миграцию для кастомной модели пользователя (User) в Django:

django.db.migrations.state.InvalidBasesError: Cannot resolve bases for [<ModelState: 'cms.PageUser'>]

Как оказалось, всё дело в том, что django cms в 0001_initial.py миграции пытается обратиться к миграциям модели User:

class Migration(migrations.Migration):

    dependencies = [
        ('auth', '__first__'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),  # обращение к миграциям модели User
        ('sites', '__first__'),
    ]
    ...

И не находит, так как у нас ещё нет пока миграций для нашей модели кастомного юзера. Поэтому перед созданием миграций кастомного пользователя, нужно закомментировать приложения djangocms_text_ckeditor и cms:

INSTALLED_APPS = (
    ...
    'django.contrib.auth',
    'my_custom_auth...

Changed pages in django cms

Простой способ вывести список изменённых страниц в django cms заключается в построении запроса через модель Title:

dirty_titles = Title.objects.filter(publisher_is_draft=True, publisher_state=PUBLISHER_STATE_DIRTY)

В шаблоне результат можно вывести так:

{% if dirty_titles %}
    <p style="font-weight: bold;">Не опубликованы изменения следующих страниц:</p>
    {% for title in dirty_titles %}
        <p class="changelink"><a target="_blank" href="{{ title.page.get_absolute_url }}">{{ title.page.get_title }}</a></p>
    {% endfor %}
{% endif %}

Если у вас мультиязычный сайт, то нужно предусмотреть группировку по языкам (данное свойство находится в экземпляре модели Title). Или же можно результат сделать похожим на структуру страниц django cms.

Моей задачей было вывести в...


Round in python

Округление в python осуществляется функцией round(number, ndigits), где number - округляемое число, а ndigits - количество знаков после запятой. Например:

round(2.137, 2)  # = 2.14

Иногда округление может дать неожиданный результат, например:

round(2.45, 2) # = 2.5
round(2.55, 2) # = 2.5, а не 2.6!

Это связано с неточностью представления типа float (см. ). Так как в компьютере числа записываются в двоичном виде, то приблизительно можно посмотреть, как хранятся числа 2.45 и 2.55, с помощью строкового представления чисел в python. Выведем данные числа с точностью до 30 знаков после запятой:

>>> '%0.30f' % 2.45
'2...

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

Попробуйте