Если в PHP, чтобы узнать значение переменной в том или ином месте кода, мы применяем echo, var_dump( ), print_r( ), то в фреймворке Django в коде моделей (models.py) или представлений (views.py) мы можем два метода: print и assert False, myvar
Уроки по python-фреймворку Django. В уроках по шагам раскрываются важные аспекты данного фреймворка, освещаются ошибки и сложности, с которыми может столкнуться Django разработчик.
среда, 29 мая 2013 г.
суббота, 25 мая 2013 г.
Как получить из списка первый элемент в шаблоне Django
Имеется модель Коллекция. У коллекции может быть несколько фотографий. Возникла необходимость в шаблоне, в котором уже получен список фотографий коллекции выводить только первую фотографию. Как это сделать?
1. В шаблоне Django можно проделать манипуляцию с тэгом with и фильтром first:
2. Непосредственно обратиться к элементу списка по индексу. Это позволяет отобразить элемент с любым индексом:
1. В шаблоне Django можно проделать манипуляцию с тэгом with и фильтром first:
{% with attachments_list|first as attachment %}
{{ attachment.filename }}
{% endwith %}
2. Непосредственно обратиться к элементу списка по индексу. Это позволяет отобразить элемент с любым индексом:
{% with attachments_list.0 as attachment %}
{{ attachment.filename }}
{% endwith %}
пятница, 24 мая 2013 г.
четверг, 23 мая 2013 г.
Как настроить MEDIA_ROOT и MEDIA_URL в Django
Параметры MEDIA_ROOT и MEDIA_URL показывают, куда будут складываться файлы, загружаемые пользователями вашего Django-сайта.
Но как их правильно настроить?
Но как их правильно настроить?
понедельник, 20 мая 2013 г.
Отображение ForeignKey в админке Django
Есть у нас модель Конкурс:
Для того, чтобы эти записи в выпадающем списке были отсортированы по-порядку, в классе Contest добавим:
class Contest(models.Model):
"""
Конкурс, проводимый ежегодно
"""
title = models.CharField(max_length=200, verbose_name='Название конкурса')
year = models.SlugField(unique=True, max_length=4, verbose_name='Год конкурса')
description = models.TextField(verbose_name='Описание конкурса')
def __unicode__(self):
return unicode(self.year + " " + self.title)
class Meta:
verbose_name = 'Конкурс'
verbose_name_plural = 'Конкурсы'
Допустим мы хотим использовать ее в модели Призер:
class Prizer(models.Model):
contest = models.ForeignKey(Contest, verbose_name=u'Конкурс')
# другие поля...
class Meta:
verbose_name = 'Призер'
verbose_name_plural = 'Призеры'
Вот как в админке Django отобразится модель Prizer и поле contest:Для того, чтобы эти записи в выпадающем списке были отсортированы по-порядку, в классе Contest добавим:
class Contest(models.Model):
# все то же, что написано выше
class Meta:
# ...
#вот эта магическая строчка для сортировки:
ordering = ('year',)
После этого записи будут отсортированы в используемом поле ForeignKey по-порядку:четверг, 16 мая 2013 г.
Декораторы в python
Взгляните на этот чудо-код с декоратором @amazed:
def amazed(func):
def wrap():
return func() + 'aaa!'
return wrap
@amazed
def hey():
return 'hey'
print hey() # 'heyaaa!'
Эта запись позволяет заменить следующий код:
def amazed(func):
# определяем функцию-обертку
def wrap():
# выполняем переданную функцию - func().
# К результату подсоединяем строку 'aaa!'
return func() + 'aaa!'
# возвращаем объект функции wrap
return wrap
def hey():
return 'hey'
hey = amazed(hey)
print hey()
Таким образом, декоратор @amazed позволил нам, не тронув кода функции hey(), изменить ее поведение и сделать так, чтобы к слову 'hey' добавлялась строка 'aaa!'
Зачем в python обрабатывать ошибки?
Все познается из практики. Будет ли показано 'hello':
Но в python есть блок try/catch/finally, который позволяет обработать ошибку и дать скрипту шанс выполняться дальше.
def shout(word=u'yes'):
return word.capitalize()+'!'
scream = shout
del shout
print shout()
print 'Hello'
Переменную shout мы удалили, поэтому будет ошибка. Выполнение скрипта остановится, слово 'hello' показано не будет.Но в python есть блок try/catch/finally, который позволяет обработать ошибку и дать скрипту шанс выполняться дальше.
def shout(word=u'yes'):
return word.capitalize()+'!'
scream = shout
del shout
# Мы заранее предвидим, что функцию
# shout() мог удалить какой-то касатик
try:
print shout()
except NameError, e:
print e
print 'Hello'
В этом случае будет выведено:name 'shout' is not defined Hello
воскресенье, 5 мая 2013 г.
Django и fixtures
Раньше я для разработки использовал базу данных sqlite3. И это было ошибкой, т.к.
1. в продакшене я применял другую базу данных - MySQL
2. возможности sqlite3 слишком ограничены, что не позволяло мне использовать south в своих разработках.
Теперь я по совету западных разработчиков использую в своих проектах PostgreSQL.
Кстати, я был привязан к sqlite потому, что это удобно сохранить данные разрабатываемого сайта в одном файлике mysite.sqlite3, потом скинуть папку с проектом на другой компьютер, запустить там manage.py runserver и... вуаля - сайт работает!
Но оказывается в django есть возможность сделать так, чтобы данные автоматически вставлялись в базу данных при syncdb проекта.
Для этого существуют fixtures - представления данных ваших приложений в форматах .json/.xml/.yaml
По умолчанию фикстуры нужно хранить в папке fixtures, которую нужно создать внутри каждого приложения.
Если фикстуры сохраняются в файл с названием initial_data, то при каждом syncdb фикстуры будут загружаться в базу данных вашего проекта.
Здесь мы вручную загружаем в базу данных приложения myapp данные, сохраненные в файле myfix.json
1. в продакшене я применял другую базу данных - MySQL
2. возможности sqlite3 слишком ограничены, что не позволяло мне использовать south в своих разработках.
Теперь я по совету западных разработчиков использую в своих проектах PostgreSQL.
Кстати, я был привязан к sqlite потому, что это удобно сохранить данные разрабатываемого сайта в одном файлике mysite.sqlite3, потом скинуть папку с проектом на другой компьютер, запустить там manage.py runserver и... вуаля - сайт работает!
Но оказывается в django есть возможность сделать так, чтобы данные автоматически вставлялись в базу данных при syncdb проекта.
Для этого существуют fixtures - представления данных ваших приложений в форматах .json/.xml/.yaml
Дамп базы данных в файл фикстур
python manage.py dumpdata --format=json myapp > myapp/fixtures/initial_data.json
По умолчанию фикстуры нужно хранить в папке fixtures, которую нужно создать внутри каждого приложения.
Если фикстуры сохраняются в файл с названием initial_data, то при каждом syncdb фикстуры будут загружаться в базу данных вашего проекта.
Загрузка фикстуры из файла
python manage.py loaddata myapp/fixtures/myfix.json
Здесь мы вручную загружаем в базу данных приложения myapp данные, сохраненные в файле myfix.json
суббота, 4 мая 2013 г.
PostgreSQL против MySQL
В своих проектах я всегда использовал MySQL и не задумывался, что может быть что-то лучше. Недавно услышал, что есть другая база данных и что она якобы гораздо удобнее. Многие разработчики Django используют в своей работе именно PostgreSQL. Данное видео поможет вам понять - хотите вы использовать MySQL или нет.
После просмотра этого видео я решил перейти на использование в проекте своего сайта http://yesnik.ru базы данных PostgreSQL.
После просмотра этого видео я решил перейти на использование в проекте своего сайта http://yesnik.ru базы данных PostgreSQL.
Подписаться на:
Комментарии (Atom)



