Закрыть

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

Цитата дня

Vivazzi.ru

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

Воображение — это самое главное, оно является отражением того, что мы притягиваем в свою жизнь.

Альберт Эйнштейн

IT Блог

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

ChoiceField with empty value, select default value django. Вставить пустое значение в тег селект

Если мы имеем дело с обычно формой ​forms.Form (и в особом случае при использовании forms.ModelForm, см. ниже) и хотим иметь пустое значение при выборе в селекте, то нам нужно позаботиться о создании пустого значения вручную.

Для того, чтобы вставить пустое значение в тег селект, можно использовать два варианта: либо на уровне серверной части, либо на клиентской.

На уровне Django

1-ый способ - с использованием ChoiceField

class MyForm(forms.Form):
SERVICES = ((REG_IP, u'Регистрация ИП'),
            (REG_OOO, u'Регистрация ООО'))
SUBJECTS = ((SERVICE, u'Услуга'),
            (PARTNERSHIP, u'Сотрудничество'),

blank_choice = (('', '--- Выберите значение ---'),) 
service = forms.ChoiceField(choices=blank_choice + SERVICES)
subject = forms.ChoiceField(choices=blank_choice...

reverse url admin django. Получить путь объекта в представлениях и шаблонах для изменения в админке

Получить путь (url) объекта в представлениях и шаблонах для изменения в админке не сложно. Достаточно знать синтаксис первого аргумента метода reverse. Для того, чтобы что-то сделать с объектом из админки нужно сначала написать "admin:app_model_", где app - приложение, где находится необходимая модель, model - сама модель. И выбрать необходимое действие:

  • add - добавить новый объект.
  • change - изменить объект.
  • changelist - открыть список объектов.
  • history - открыть историю изменения объекта.
  • delete - удалить объект.

Ниже я привёл примеры, которые наглядно это дело отображают (обратите внимание, что некоторые урлы требуют id объекта).

В представлениях (во вьюхах)

instance = Model.objects.get(id=1)  # Найдём объект по id=1...

Проверка на наличие внешнего ключа foreign key. Ошибка DoesNotExist

Если проверить наличие внешнего ключа поля ForeignKey у экземпляра модели, которая не имеет этот внешний ключ, то выйдет ошибка: DoesNotExist, так как у модели нет этого атрибута. Это не тот случай, когда модель имеет атрибут, но его значение None, поэтому нам выводится ошибка, что атрибут не найден.

Допустим имеется класс Person, содержащий поле school, которое является внешним ключом класса School.

Пусть в базе данных существует person с id=1 без school:

person = Person.objects.get(id=1)
if person.school:
   # to do something

Получим DoesNotExist.

Используя встроенную функцию hasattr(obj, 'field'), получим False, если в БД отсутствует связь с другой...


Расстянуть текст по длине блока

Есть несколько способов растянуть текст по ширине блока или страницы адаптивным образом.

1. Использование css-трансформации scale

Данный код позволяет менять размер шрифта в зависимости от ширины браузера:

<!-- test.html -->
<div class="test">Произвольный текст</div>
// script.js
var $window = $(window), $body = $('body'), $wrap = $('.wrap'), defaultWidth = 1000;
     
$window.resize(function () {
    $wrap.css({transform: 'scale(' + $window.width() / defaultWidth  + ')'});
    var height = $wrap.outerHeight(true);
}).resize();
/* styles.css */
.svg_test text {font-size: 72px;}

Немного доработав код, вы можете растянуть текст не только на всю длину страницы, но и на длину конкретного блока.

2. Использование параметра font-size

Есть ещё другой способ заставить шрифт растягиваться...


Ошибка PIL: The _imagingft C module is not installed

Если возникает ошибка: The _imagingft C module is not installed, то для PIL не хватает библиотеки libfreetype.

для Linux решением может служить установка libfreetype6-dev:

sudo apt-get install libfreetype6-dev
pip uninstall pil
pip install pil

stackoverflow подсказывает, что для OS X нужно сделать симлинки:

pip uninstall PIL
ln -s /usr/X11/include/freetype2 /usr/local/include/
ln -s /usr/X11/include/ft2build.h /usr/local/include/
ln -s /usr/X11/lib/libfreetype.6.dylib /usr/local/lib/
ln -s /usr/X11/lib/libfreetype.6.dylib /usr/local/lib/libfreetype.dylib
pip install PIL

Ошибка SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS)

Ошибка "SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS)" может возникать в том случае, если вы не добавили нужный домен в ALLOWED_HOSTS в файле settings.py. Например:

ALLOWED_HOSTS = ['demo.vits.pro', 'www.demo.vits.pro']

Если же снова появляется та же ошибка, но с непонятным адресом, например "hotel.qunar.com":

Traceback (most recent call last):

  File "/home/vivazzi/demo/src/demo/env/lib/python2.7/site-packages/django/core/handlers/base.py", line 92, in get_response
    response = middleware_method(request)

  File "/home/vivazzi/demo/src/demo/env/lib/python2.7/site-packages/django/middleware/common.py", line 57, in process_request
    host...

Использование redirect для перехода на страницу с GET параметрами в Django

Бывает, есть необходимость после отправки данных с формы перейти с представления на ту же страницу (или какую-то другую), но с передачей GET параметров в строке запроса.

В простейшем случае можно поступить так:

def feedback(request):
    form = ContactForm(data=request.POST or None)

    if form.is_valid():
        # some code

        params = {'send': 'true'}

        return redirect('{}?{}'.format(reverse(feedback), urlencode(params)))

    return render(request, 'feedback_forms/feedback_minimum.html', {'form': form})

Для кого-то это, конечно, очевидно.. я же иногда теряюсь :)


Проблема с кодировкой python: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)

Если у вас Traceback показывает следующую информацию:

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 280, in run
    self.result = application(self.environ, self.start_response)
  File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 709, in __call__
    mime_type = mimetypes.guess_type(file_path)[0]
  File "C:\Python27\lib\mimetypes.py", line 295, in guess_type
    init()
  File "C:\Python27\lib\mimetypes.py", line 356, in init
    db.read_windows_registry()
  File "C:\Python27\lib\mimetypes.py", line 261, in read_windows_registry
    for ctype in enum_types(mimedb):
  File "C:\Python27\lib\mimetypes.py", line 251, in enum_types...

Оптимальная конфигурация CKEDITOR_CONFIGS приложения ckeditor в Django

Для того чтобы сконфигурировать популярный html-редактор ckeditor под себя, нужно добавить CKEDITOR_CONFIGS в settings.py проекта. Наиболее оптимальная настройка, которой я пользуюсь:

CKEDITOR_CONFIGS = {
    'default': {
        'toolbar': [
            ['Undo', 'Redo',
             '-', 'Bold', 'Italic', 'Underline',
             '-', 'Link', 'Unlink', 'Anchor',
             '-', 'Format',
             '-', 'Maximize',
             '-', 'Table',
             '-', 'Image',
             '-', 'Source',
             '-', 'NumberedList', 'BulletedList'
            ],
            ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock',
             '-', 'Font', 'FontSize', 'TextColor',
             '-', 'Outdent', 'Indent',
             '-', 'HorizontalRule',
             '-', 'Blockquote'
            ]
        ],
        'height': 500,
        'width': '100%',
        'toolbarCanCollapse': False,
        'forcePasteAsPlainText': True
    }
}

Undo, Redo - отменить, повторить шаг
ShowBlocks - показать/скрыть блоки параграфов
Bold, Italic, Underline - сделать текст жирным, курсивным, подчёркнутым
Link, Unlink, Anchor - добавить, убрать ссылку; добавить якорь
Format - выбор формата (h1, h2 и т.д.)
Maximize - развернуть во весь экран (очень удобно...

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

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

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

Попробуйте