IT Блог

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

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

$.scrollTo is not a function

Довольно странная ошибка $.scrollTo is not a function, если учесть, что она работала достаточно хорошо и вдруг перестала работать на одном проекте. Как бы то ни было я её исправил, проделав следующее:

  1. Убрал со всех <script> тегов параметр type="text/javascript". Так нужно, чтобы однозначно добавить скрипт в список "addtoblock "js"" приложения django-compress. Скорее всего, в этом ошибка и была. Два раза загрузилась библиотека Jquery.
  2. Поменял версию Jquery с 1.8.2 на 2.2.0

Перевод Django Shop

Перевод документации по Django Shop осуществляется Мальцевым Артёмом, автором данного сайта. Перевод преследует цели:

  • Облегчить изучение Django Shop для российского сообщества программистов, сняв языковой барьер для людей, которые не особо хорошо владеют техническим английским языком.
  • Привлечь новых разработчиков использовать Django Shop в качестве платформы для интернет-магазина. С одной стороны, специалисты освоют мощь и гибкость данной системы и смогут разрабатывать интернет-магазины проще и функциональнее. А с другой стороны, увеличение количества программистов будет способствовать более быстрому развитию Django Shop.
  • За счёт увеличения количества специалистов, решать задачи, проблемы и ошибки можно будет проще.

Я не профессиональный переводчик, а сам перевод является вольным. Вы...


Кроссбраузерность

background-position

Firefox и Opera не поддерживают свойства background-postion-x и background-postion-y, поэтому нужно использовать background-postion.


Особенности использования classy tags

Встретилась на моём пути маленькая проблемка совместного использования MultiValueArgument и MultiKeywordArgument:

class MyTag(Tag):
    name = 'my_tag'
    options = Options(
        MultiValueArgument('args'),
        MultiKeywordArgument('kwargs'),
        blocks=[('end_my_tag', 'nodelist')],
    )

    def render_tag(self, context, args, kwargs, nodelist):
        # some logic ...
        return some_result

# in template
{% my_tag var_1 var_2 key_1=v_1 key=v_2 %}

Но это приводит к ошибке, так как: MultiValueArgument берёт все аргументы 'var_1 var_2 key_1=v_1 key=v_2' и пытается каждый аргумент распарсить в том числе и 'key_1=v_1' на что classy tags отвечает:

TemplateSyntaxError at /.../
Could not parse the remainder: '=v_1' from 'key_1=v_1'

Чтобы решить данную проблему, можно воспользоваться каким-нибудь стопором, например 'word_breakpoint':

class MyTag(Tag):
    name...

ошибка render_model dictionary update sequence element #0

Если вы используете Django-cms и при её обновлении на более новую версию получили ошибку

ValueError: dictionary update sequence element #0 has length 8; 2 is required

то, возможно, дело в старой версии django-classy-tags==0.6.2, если она у вас прописана в requirements.txt, как это было у меня.

Чтобы исправить ошибку, нужно обновить django-classy-tags до более новой версии.


django.db.utils.ProgrammingError: relation "django_content_type" already exists

При переходе с версии Django 1.5.x на Django 1.7.x и версии выше могут возникнуть ошибки при миграции данных:

django.db.utils.ProgrammingError: relation "django_content_type" already exists
django.db.utils.ProgrammingError: relation "auth_permission" already exists
django.db.utils.ProgrammingError: relation "django_admin_log" already exists
django.db.utils.ProgrammingError: relation "admin_tools_dashboard_preferences" already exists
django.db.utils.ProgrammingError: relation "django_session" already exists
django.db.utils.ProgrammingError: relation "django_site" already exists

Для решения проблемы нужно воспользоваться ключом --fake-initial при вызове команды migrate:

manage.py@project > migrate --fake-initial
bash -cl "/path/to/project/env/bin/python /opt/pycharm-5.0.3/helpers/pycharm/django_manage.py migrate --fake-initial /path/to/project"
Operations to perform:
  Synchronize unmigrated apps: staticfiles, sitemaps, admin_tools, messages
  Apply all migrations: sessions, admin, sites, auth, contenttypes, dashboard
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing...

cannot alter table because it has pending trigger events

Ошибка cannot alter table because it has pending trigger events (нельзя выполнить ALTER TABLE, так как с этим объектом связаны отложенные события триггеров) чаще всего означает, что одно или несколько свойств полей не могут быть изменены за одну транзакцию. Если дословно переводить, может быть непонятно. Да и моя расшифровка не блещет полнотой передачи понимания, поэтому просто покажу примеры.

Убрать blank=True с полей

Допустим имеем модель:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
from django.utils.encoding import python_2_unicode_compatible


@python_2_unicode_compatible
class MyModel(models.Model):
    title = models.CharField(max_length=100, null=True, blank=True)
    content = models.TextField(null=True, blank=True)
    template = models.CharField(max_length=255, null=True, blank=True)


    def...

Скрыть предупреждение PyCharm

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

Часто ищут исправить ошибку might be referenced before assignment, полагая что это может быть ошибкой. Но это предупреждение PyCharm, и его можно скрыть, используя # 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)

Предупреждение Function name should be lowercase

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

# noinspection PyPep8Naming
def UpdateRateError(self):
    ...

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

Перед строчкой с предупреждением...


Тонкость при равномерном выравнивании блоков по ширине

Чтобы равномерно выравнить блоки по ширине достаточно написать что-то вроде:

# html
<div class="wr">
    <div></div>
    <div></div>
    <div></div>
</div>

#css
.wr {text-align: justify;}
.wr:before {content: '';display: block;width: 100%;height: 0;}
.wr:after {width: 100%;height: 0;visibility: hidden;overflow: hidden;content: '';display: inline-block;}

.wr div {display: inline-block;position: relative;width: 20px; height: 10px;background-color:#000;}

И этот код будет работать в большинстве случаев. Но может возникнуть проблема такого рода, как не работает или, другими словами, блоки слиплись. Или же выравнивается неправильно со сдвигом вправо. Вся фишка заключается в невидимых неразрывных пробелах &nbsp.

Случай 1. Блоки слиплись

В случае когда блоки слиплись, код html, скорее всего, выглядит так:

<div class="wr"><div></div><div></div><div></div></div>

Или...

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

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

Попробуйте

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