Если в 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)