• Как в Django использовать CBV с формой?

    Vintorez
    @Vintorez
    Вы в классе EarnPeriods используете наследование от класса ListView, который не поддерживает post-запросы https://docs.djangoproject.com/en/dev/ref/class-ba...
    Этот класс используется только для отображения "списка объектов".
    А форму на html-странице Вы отправляете post-запросом. Вот и ошибка 405 получается.

    В общем, у Вас 3 варианта:
    1) использовать класс, поддерживающий post-запросы. Какой-нибудь из этих https://docs.djangoproject.com/en/dev/ref/class-ba... в зависимости от того, что нужно;
    2) отправлять форму в шаблоне get-запросом (только если эта форма получает и отображает объекты, а не изменяет их в БД);
    3) написать самому нужные методы (в том числе и post()), но тогда лучше наследоваться от какого-нибудь общего класса типа https://docs.djangoproject.com/en/dev/ref/class-ba...
    Ответ написан
    Комментировать
  • Как отключить автоматические переводы в django?

    Vintorez
    @Vintorez
    Уберите django.middleware.locale.LocaleMiddleware из MIDDLEWARE_CLASSES в settings.py
    Ответ написан
    Комментировать
  • UWSGI и ошибки импорта?

    Vintorez
    @Vintorez
    Не уверен, но возможно это размышление поможет. Обычно ошибки типа "cannot import name" возникают если пути указаны неверно. Внутренние пути проекта указаны относительно самого проекта. А вот знает ли сам модуль uwsgi путь до проекта?! В настройках модуля есть опция chdir, которая переходит в нужный вам каталог еще до запуска модуля. Возможно она у вас не указана. Либо неверно указана переменная pythonpath.
    Например, я запускаю uwsgi с помощью supervisor (но можно и без него) вот такой командой:
    /usr/local/bin/uwsgi --yaml /etc/uwsgi/apps-enabled/uwsgi.yaml

    а сам файл настроек uwsgi.yaml выглядит так:
    uwsgi:
        uid: user_name
        gid: user_group
        socket: /tmp/uwsgi.sock
        chmod-socket: 666
        chdir: /opt/project_dir/
        pythonpath: /opt/project_dir/project_name/
        env: DJANGO_SETTINGS_MODULE=project_name.settings
        module: project_name.wsgi
        max-requests: 5000
        buffer-size: 32768
        post-buffering: 8192
        enable-threads: 1
        harakiri: 660
        reload-mercy: 8
        master: 1
        no-orphans: 1
        vacuum: 1

    Возможно пригодится.
    Ответ написан
  • Как реализовать организацию отдачи статического контента с учетом версионирования?

    Vintorez
    @Vintorez
    Костылей городить не нужно. В Джанго все уже есть. Для версий от 1.4.х до 1.6.х специально для этого предусмотрено хранилище статики CachedStaticFilesStorage. Как подключать - по ссылке все описано. А смысл, если вкратце, такой:
    Командой collectstatic создаются копии ваших статических файлов с добавлением хэша к именам файлов (хэш вычисляется из контента самого файла). Таким образом, если контент файла изменяется, то изменяется и его название, поэтому браузер вынужден получать новый файл статики с вашего сервера. Если файл не менялся - тянем с кэша браузера, как обычно.
    Если вы в самом проекте используете темплейт-тег static (как и должно быть), а не переменную STATIC_URL, то проблем с подключением этого хранилища статики у вас возникнуть не должно.
    Да, есть тут один момент. В созданных новых файлах статики все имеющиеся ссылки на другую статику (например в css-файле есть ссылка на картинку) тоже изменяются. Если у вас в файлах есть битые ссылки на статику, то collectstatic свалится с ошибкой.
    Ответ написан
    3 комментария
  • Django - DateTimeField - тип str?

    Vintorez
    @Vintorez
    Добавлять в сигнал лишний запрос к БД не нужно. В документации написано правильно - БД не хранит это как питоновский объект datetime, но тут дело не в этом, так как сигнал получает экземпляр именно вашего класса, то и работать он должен так как вы описали класс.
    В общем, у вас проблема не в получении объекта, а в его сохранении! Вероятнее всего в поле time_start вы сохраняете строку, а не объект datetime, вот и получаете строку.
    Сохранять надо так:
    track.time_start = datetime.datetime(2013, 8, 19, 11, 28, 58)
    track.save()

    Тогда и в сигнале можно будет увидеть, что тип объекта верный:
    print "Time start is %s" % instance.time_start.__class__.__name__
    >>> Time start is datetime
    Ответ написан
    Комментировать
  • Как правильно написать regexp?

    Vintorez
    @Vintorez
    Вот так:
    regx = re.compile(r"""_\(['"](?P<value>.+)['"]\)""")
    Ответ написан
  • Как правильно написать regexp?

    Vintorez
    @Vintorez
    Мне кажется проверка на двойные и одинарные кавычки внутри это лишнее. Я думаю, вам будет достаточно написать так: regx = re.compile(r"""_\(.*\)""")
    Ответ написан
  • Urllib2 в python: не получается получить страницу, как в таком случае перейти к следующей странице?

    Vintorez
    @Vintorez
    У вас есть 2 варианта:
    1. Перед отправкой get-запроса отправлять head-запрос с целью проверить какой код вернется (в этом случае исключение не вызывается).
    2. Ловить исключение отправки get-запроса, как сказал @SolidlSnake блоками try/except.

    Довольно понятные примеры на оба этих варианта приведены вот здесь:
    stackoverflow.com/a/16778473
    Ответ написан
    Комментировать
  • Как сделать pagination для Django 1.6?

    Vintorez
    @Vintorez
    Так а чем вам не подходит стандартный пагинатор?
    https://docs.djangoproject.com/en/1.6/topics/pagin...
    То, что вы привели в пример, возможно реализовать и без установки дополнительных батареек.
    Ответ написан
    Комментировать
  • Как установить python 3.3 по умолчанию в ubuntu 13.10?

    Vintorez
    @Vintorez
    Чтобы установить python 3-ей версии по умолчанию в ubuntu есть 2 способа:

    1. добавляете вот такую строчку alias python=python3 в ваш ~/.bashrc или ~/.bash_aliases файл и обновляете сам файл source ~/.bashrc (этот вариант будет работать только для той учетной записи, под которой вы добавляете алиас ).

    2. выполнить sudo ln -sf python3 /usr/bin/python. эта команда обновит ссылку на питон в вашем /usr/bin каталоге (этот вариант будет работать для всех учетных записей).

    Естественно, оба варианта будут работать только если питон 3 уже установлен на машину :)

    Насчет sublime text 3 @brutal_lobster привел правильный конфиг. Единственное, что этот конфиг сработает, если в /usr/bin/ имеется файл python3.3. Если его там нет, путь нужно будет указать абсолютный. Например такой: "cmd": ["/usr/bin/python3", "-u", "$file"],
    Ответ написан
    2 комментария
  • Как адаптировать Django приложение до версии Django 1.6?

    Vintorez
    @Vintorez
    Хмм, ни одного трейсбэка не приведено, но возможно вы просто забыли установить django-tagging от которого зависит работа django-portfolio.

    А вообще, почему бы вам не посмотреть просто в сторону более свежих батареек для джанго?
    Вот вроде простенькая вещь: https://github.com/dokterbob/django-portfolio
    А вот эта потяжелее: https://github.com/stefanfoulis/django-filer
    Но обе вроде мейнтейнятся авторами.
    Ответ написан