IT Блог

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

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

linebreak in admin django. Разделить на строчки поле TextField в админке или вывести html в ячейке таблицы при редактировании списка объектов

Рассмотрим ситуацию, когда нужно вывести список доменных имён в списке объектов.

Допустим, мы хотим вести учёт пользователей, которые имеют свои доменные имена.

class Person(models.Model):
    name = models.CharField('Имя', max_length=255)
    domains = models.TextField('Доменные имена')

Теперь, если мы хотим видеть эту информацию в списке просмотра объектов Person, то у нас будет следующее:

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ('name ', 'domains')

И создадим несколько пользователей с несколькими доменными именами, которые записываются каждый с новой строки. Мы увидим, что в админке они отображаются строчкой. Чтобы они были каждый домен с новой строки, можно поступить двумя способами.

1-ый способ...


Подборка полезных библиотек, плагинов, скриптов

Список содержит применяемые мною библиотеки, плагины, скрипты и т. д. Это не весь список, но может кто-то найдёт что-то для себя полезное:

jquery-autotab-master - настройка перехода фокуса на следующее поле по нажатию клавиши tab

jquery.scrollTo - плавная перемотка страницы до указанного элемента.

Селекты с автокомплитом

chosen - http://harvesthq.github.io/chosen/

typeahead - https://github.com/twitter/typeahead.js

jquery ui - https://jqueryui.com/autocomplete/

Ну и любимая блоггерами строчка подобных постов: список будет пополняться :)


javascript как узнать время в определённом городе

Есть сервис, позволяющий узнать время в городе http://time.is/ru/widgets

Например, для Иркутска будет вставка такого скрипта:

<a href="http://time.is/Shelekhov" id="time_is_link" rel="nofollow">Шелехов:</a>
<span id="Shelekhov_z41b"></span>
<script src="http://widget.time.is/t.js"></script>
<script>time_is_widget.init({Shelekhov_z41b:{time_format:"hours:minutes"}});</script>

Ниже показан рабочий пример скрипта:


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})

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

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

Попробуйте

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