среда, 10 июля 2013 г.

Создание меню сайта в Django

Вот есть у нас простой Сайт о костюмах для танцев живота:

Рис. 1

Нам нужно, чтобы владелец сайта мог сам редактировать пункты меню через админку Django. Для этого мы используем стороннее приложение django-menu.

четверг, 4 июля 2013 г.

MEDIA_ROOT и MEDIA_URL в Django

Параметры MEDIA_ROOT и MEDIA_URL нужны для указания места хранения файлов, загруженных пользователями.
Вот, что написано в комментариях к данным параметрам в settings.py:
# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/var/www/example.com/media/"
MEDIA_ROOT = 'media/'

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA_URL = 'http://127.0.0.1:80/media/'

Но все хорошо, если сайт у нас запущен по адресу http://127.0.0.1:80/. Попробовал я запустить его по адресу http://192.168.0.5/, чтобы сделать доступным для компьютеров моей локальной сети, как все картинки перестали отображаться:




среда, 26 июня 2013 г.

Настройка роутов, путей в urls.py фреймворка Django

Пусть мы только что создали проект project. В нем сделали приложение articles, в котором намереваемся хранить статьи. При этом мы хотим, чтобы при обращении в браузере по адресу http://127.0.0.1:8000/ у нас загружались urls.py этого приложения articles.

Вот главные роуты проекта: project/urls.py:

# ... начальные настройки

urlpatterns = patterns('',
    # подключаем настройки роутов приложения article
    url(r'', include('article.urls')),

    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    url(r'^admin/', include(admin.site.urls)),
)

четверг, 6 июня 2013 г.

'ManyRelatedManager' object is not iterable

Чтобы исправить эту ошибку, не нужно делать в шаблоне так:

{% for contest in winner.contest %}
    {{ contest.title }}
{% endfor %}

Нужно делать так:
{% for contest in winner.contest.all %}
    {{ contest.title }}
{% endfor %}

Это выражение winner.contest.all позволяет в шаблоне Django получить все элементы связанной модели (тип связи ManyToMany).
Вот так выглядит модель Winner:
class Winner(models.Model):
    # ... поля модели
    # значения этого поля мы хотели получить в шаблоне
    contest = models.ManyToManyField(Contest, verbose_name=u'Конкурс')


понедельник, 3 июня 2013 г.

Статический метод модели в Django: @staticmethod, @classmethod

Представим, что в нашем Django-проекте есть модель Конкурс (Contest). Конкурс ежегодный, поэтому характеризующая его модель будет иметь атрибут year.
Как же нам в классах представлений получить год последнего прошедшего конкурса?
Конечно! Написать для модели Contest метод, который будет возвращать этот год.
Метод должен быть статическим, т.е. для его вызова нам вовсе будет не нужно создавать экземпляр класса Contest.