среда, 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.

Reverse for '*' with arguments '()' and keyword arguments '{u'pk': ''}' not found

Ошибка эта была получена, когда я попытался вывести на страницу список коллекций одежды для определенного года. Причина этой ошибки в том, что в шаблоне тэг {% url ... %} получал для pk пустое значение. В сообщении об ошибке был показан проблемный фрагмент шаблона:

{% for collection in collection_list %}
<li>
    <a>
        {{ collection.title }}
    </a> ( {{ collection.author.all|join:', ' }} )
</li>
{% endfor %}