IT Блог

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

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

Пример обработки formset

В данном примере мы имеем доступ к управляющей (главной) форме и к его инлайновым формам. Это позволяет нам проводить более сложные "совместные" проверки, например:

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

from django.forms import BaseInlineFormSet
from django.contrib import admin
from django.core.exceptions import ValidationError


class GalleryPictureInlineFormSet(BaseInlineFormSet):
    def clean(self):
        if self.management_form.data.get('is_thumbs_hidden', None) == 'on' and not any([form.cleaned_data.get('is_use_preview_window') for form in self.forms]):
            raise ValidationError('Выберите опцию либо "Отображать миниатюры галереи", '
                                  'либо "Использовать в окне предпросмотра" в конкретном изображении')


class GalleryPictureInline(admin.TabularInline):
    formset = GalleryPictureInlineFormSet
    model = GalleryPicture
    extra = 0


class Gallery(admin.ModelAdmin):
    ...
    inlines = (GalleryPictureInline, )

rndc: connect failed: 127.0.0.1#953: connection refused

При возникновении ошибки rndc: connect failed: 127.0.0.1#953: connection refused стоит проверить, запускается ли bind 9 при старте Linux и правильно ли запускается.

Как-то у меня возникала данная проблема из-за того, что я неправильно добавил в автозапуск bind.

Пример правильного добавления:

$ /etc/init.d/bind9 start
$ update-rc.d bind9 start 15 2 3 4 5 . stop 70 0 1 6 .

А лучше на мой взгляд создать файл с командами на автозагрузку и добавить туда /etc/init.d/bind9 start. Как это делается, я описывал в

Если проблема не решилось, то гуглить :)


Добавление команд в автозагрузку Linux

Чтобы команды запускались автоматически при старте Линукс, нужно создать файл /etc/init.d/local

sudo nano /etc/init.d/local

Затем добавляем свои команды или скрипты, например:

#! /bin/sh
/usr/local/sbin/nginx
/etc/init.d/bind9 start  # добавляет bind9 в автозапуск
service elasticsearch start  # добавляет elasticsearch в автозапуск

Теперь файл, состоящий из списка команд, добавим в автозагрузку:

sudo chmod +x /etc/init.d/local # делаем файл исполняемым
sudo update-rc.d local defaults 80 # добавляем скрипт /etc/init.d/local в автозагрузку

Этого достаточно, чтобы запускать команды и сервисы автоматически при загрузки системы.


Примеры расширения админки Django

Изменяем отображение полей fieldsets в зависимости от того, находимся ли мы в режиме DEBUG:

# -*- coding: utf-8 -*-
from django.conf import settings
from django.contrib import admin


class ExampleAdmin(admin.ModelAdmin):
    fieldsets = [
        (u'', {
            'fields': ('field_1', 'field_2')
        }),
    ]

    debug_fieldsets = [
        (u'Debug mode', {
            'fields': ('debug_field', )
        }),
    ]

    def get_fieldsets(self, request, obj=None):
        fieldsets = super(ExamplePlugin, self).get_fieldsets(request, obj)

        if settings.DEBUG:
            fieldsets = self.fieldsets + self.debug_fieldsets

        return fieldsets

Мультиязычность и перевод в Django

Краткая шпаргалка по тому, как сделать мультиязычный сайт в Django.

1. Настраиваем settings.py

Несколько простых строк в settings.py позволят добавить многоязычность сайту:

LANGUAGE_CODE = 'ru'  # язык сайта по умолчанию

LANGUAGES = (
    ('ru', 'Russian'),
    ('en', 'English'),
)

USE_I18N = True  # активация системы перевода django

# месторасположение файлов перевода
LOCALE_PATHS = (
    'locale',
    # os.path.join(PROJECT_DIR, 'locale'),
)

Если вы используете django-cms, то добавьте ещё этот милдварь 'cms.middleware.language.LanguageCookieMiddleware', . Это полезно для запоминания, какой язык был определён, и при последующем заходе на сайт будет активизироваться именно этот язык.

2. Подготавливаем слова и фразы для перевода

В моделях:

from django.utils.translation...

Django Shop - интернет-магазин на Django

Несколько слов о Django Shop

На момент написания статьи это свежая версия, которая постоянно усовершенствуется разными разработчиками. По возможности я и сам стараюсь участвовать в развитии Django Shop.

Rief Jacob - разработчик, который взялся за тотальную переработку кода старой версии django-shop 0.2. И я ему очень благодарен за такую огромную проделанную работу и благодарен всем тем, кто развивает Django Shop!

Запуск проекта с гитхаба

Описание можно найти на странице

Установка

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

Money

# settings.py
SHOP_DEFAULT_CURRENCY = 'USD'

# Формат отображения данных...

Добавление стилей к админке django

Обычный способ:

При использовании djangocms-admin-tools:

1 - Put base.html to your spicific app for example:

# specific_app/templates/admin/base.html
{% extends "admin:admin/base.html" %}
{% block blockbots %}
    {{ block.super }}
    <link rel="stylesheet" type="text/css" media="screen" href="{{ STATIC_URL }}specific_app/css/theming.css" />
{% endblock %}

* the adding of css file to block blockbots as variant

2 - Add your specific app to INSTALLED_APPS before 'djangocms_admin_style'

INSTALLED_APPS = (
    ...
    'specific_app',
    'djangocms_admin_style',
    'django.contrib.admin',
    ...
)

3 - Create your theming.css:

form .form-row .field-box {float: left;margin-top: 0;margin-right: 20px!important;}

We can use base.html because djangocms-admin-style don't override base.html for rendering. And we can be confident overriding base.html

При...


Миграции в Django. Примеры

Добавление внешнего ключа к существующей модели по типу один-ко-многим. Внешний ключ не должен быть пустым

Пусть у нас есть товар:

# models.py
class Product(nodels.Model):
    product_name = models.CharField('Product Name', max_length=255)
    unit_price = models.DecimalField('Unit price'), decimal_places=0)

Наша задача добавить категорию для товара, причём товар не может быть без категории:

# models.py
class Category(models.Model):
    title = models.CharField('Название', max_length=20)

class Product(nodels.Model):
    category = models.ForeignKey(Category, verbose_name='Category', related_name='products')
    product_name = models.CharField('Product Name', max_length=255)
    unit_price = models.DecimalField('Unit price'), decimal_places=0)

Для выполнения задачи нужно сначала добавить category с null=True, blank=True к модели Product:

# models.py
class Category(models.Model):
    title = models.CharField('Название', max_length=20)

class Product(nodels.Model):
    category = models.ForeignKey(Category, verbose_name='Category', null=True,...

'PageSmartLinkWidget' object has no attribute 'language'

При использовании PageSmartLinkField может возникнуть ошибка AttributeError: 'PageSmartLinkWidget' object has no attribute 'language'. Возможно, какая-то настройка нужна или это недоработка виджета, но ошибку можно исправить, добавив поле "language" и немного подшаманив:

# models.py
from django.db import models

class Example(models.Model):
    link = models.CharField('Ссылка на страницу', max_length=255, blank=True)
# admin.py
from django.contrib import admin
from my_app.models import Example
from my_app.forms import ExampleForm

@admin.register(Example)
class ExampleAdmin(admin.ModelAdmin):
    fieldsets = (
        (None, {
            'fields': ('link', 'language'),
        }),
    )
    form = ExampleForm
# forms.py
from __future__ import absolute_import, print_function, unicode_literals

from django import forms
from django.forms.models import ModelForm
from django.forms.widgets import HiddenInput
from django.utils.translation import...

Свои шаблоны для обработки ошибок 403, 404 в django

В зависимости от задач можно по-разному переопределить в Django стандартное поведение на реакцию ошибок, таких как 403, 404, 500 и стандартные шаблоны вывода ошибок. В (на рус. яз. - ) хорошо это описывается, но тем не менее есть некоторые нюансы, о которых я хочу рассказать и показать в примерах.

В большинстве случаев можно оставить стандартное поведение Django, т. е. стандартные views (из django.views.defaults), обрабатывающие ошибки и переопределить только шаблоны.

Допустим, у нас есть шаблон ошибки 404:

# 404.html
{% extends "base.html" %}

{% block subtitle %}Страница не найдена{% endblock %}
{% block meta %}<meta name="robots" content="noindex, nofollow">{% endblock %}

{%...

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

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

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

Попробуйте

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