Показаны сообщения с ярлыком django. Показать все сообщения
Показаны сообщения с ярлыком django. Показать все сообщения

воскресенье, 9 июля 2017 г.

TypeError __init__() takes 1 positional argument but 2 were given


В приложении на Django можно столкнуться с ошибкой при попытке просмотреть страницу:
TypeError at /1/results/ __init__() takes 1 positional argument but 2 were given

Причины могут быть разными, но если вы используете generic представления - ListView, DetailView, то проверьте, не забыли ли вы в urls.py добавить .as_view() к названию представления.

Файл представления polls/views.py:
# ...

class ResultsView(generic.DetailView):
    model = Question
    template_name = 'polls/results.html'


Файл polls/urls.py:
from django.conf.urls import url

from . import views

app_name = 'polls'

urlpatterns = [
    # /polls/123/results
    url(r'^(?P[0-9]+)/results/$', views.ResultsView.as_view(), name='results'),
    # ...
]

Если в этом файле вместо views.ResultsView.as_view() написать просто views.ResultsView, то возникнет ошибка: __init__() takes 1 positional argument but 2 were given

вторник, 3 июня 2014 г.

Запрограммируем сайт на Django

В сети нашел отличный сайт с видеоуроками по Bitrix. Там рассказывается, как на базе этой системы запрограммировать сайт. Сразу возникло желание сделать эту же работу на фреймворке Django.
Предлагаю Вам скачать шаблон сайта и запрограммировать его на Django. Гарантирую, вы многому научитесь.
Свою реализацию программирования сайта thesame я опубликовал на github.

понедельник, 26 мая 2014 г.

Пагинация страниц в Django

Часто требуется ограничить количество записей, выводимых на страницу. Для этого используется постраничное разделение материала - пагинация (pagination). В этом уроке мы рассмотрим реализацию пагинации стандартными средствами Django.

Добавить поля в модель User в Django

Данный урок написан на базе рекомендаций документации Django по добавлению новых полей к модели пользователя.

понедельник, 12 мая 2014 г.

Опрос (ч.7)

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

Опрос (ч.6)

В части 5 нашего Django урока по созданию опроса мы заставили работать нашу форму голосования. В админке можно создавать опросы, и они будут отображаться. В этой части мы обсудим вопросы безопасности созданного приложения.

среда, 7 мая 2014 г.

Опрос (ч.5)

В части 4 мы создали роут, по которому стали доступен список последних двух опросов. В этой части мы сделаем детальное отображение опроса.

пятница, 14 марта 2014 г.

Объединение css и js файлов в один - django-compressor


Для увеличения производительности веб-приложения нужно стремиться к уменьшению количества запросов к веб-серверу при загрузке каждой страницы.
Этого можно достичь объединением файлов стилей и скриптов в единые файлы. В итоге на страницу будет загружаться по одному .css и .js файлу.
 Чтобы объединять файлы стилей и скриптов в один файл, можно воспользоваться приложением django-compressor.

пятница, 17 января 2014 г.

Bad request (400) при сохранении модели с изображением в Django

Иногда при попытке сохранения модели в админке Django может возникнуть ошибка Bad request (400). Рассмотрим пример такой модели:
class Category(models.Model):
    """ Категория товара. Например, Куртки, Пальто """
    title = models.CharField(max_length=100, verbose_name='Название')
    image = models.ImageField(upload_to='/images/category')
    slug = models.SlugField(verbose_name=u'Псевдоним для url')
    section = models.ManyToManyField(Section, verbose_name=u'Раздел сайта')
    description = models.TextField(verbose_name='Описание')

    def __unicode__(self):
        return self.title

    class Meta:
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'
Ошибка возникла из-за неверного указания пути для сохранения загружаемого файла.
В данном случае нужно было указать:
image = models.ImageField(upload_to='images/category')

понедельник, 30 декабря 2013 г.

Альтернатива PIL (Python Image Library)

В последнее время у меня стали возникать проблемы с PIL при разработке под Windows. Как только в django я создаю модель с ImageField, возникает ошибка:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 20: ordinal not in range(128)

Вникать в суть проблемы не стал, вместо PIL установил пакет Pillow.
После установки Pillow под Windows 7 приведенная выше ошибка исчезла и я, наконец, смог создать модель, содержащую ImageField.

четверг, 7 ноября 2013 г.

Валидация форм в Django

Пусть у нас есть простая форма регистрации пользователя в системе на Django. Для того, чтобы пользователь мог зарегистрироваться, нужно предоставить ему возможность указать логин и пароль:

вторник, 29 октября 2013 г.

Веб-форма средствами Django

В статье Простейшая форма на Django мы научились создавать и обрабатывать форму сложным путем, прописывая все детали. Там мы выяснили, что при большом количестве полей такой способ чреват ошибками. Поэтому сейчас мы научимся создавать форму обратной связи средствами Django, используя Django forms.

четверг, 24 октября 2013 г.

Простейшая форма на Django

Принцип работы простейшей формы Django изображен на рисунке:
Данные при отправке формы помещаются в объект request.POST.

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