Не могу заставить работать RedirectView на основе классов - PullRequest
0 голосов
/ 13 мая 2011

В настоящее время я пытаюсь перенести свои представления на основе функций для новых представлений на основе классов django 1.3.Для начала я изменил простой RedirectView, который у меня был, но я не могу заставить его работать, даже хуже, я не могу понять, как работает представление класса.Механизм прост, у меня есть поле выбора на странице индекса, пользователь выбирает опцию и нажимает кнопку «перейти».Представление должно получить URL, соответствующий этому имени, и перенаправить его туда.

При отправке сигнала POST django ничего не возвращает, просто ошибка 405. В терминале.

ОБНОВЛЕНО код:

index.html

[...]
<div id="widget">
  <h2>{% trans "Spaces list" %}</h2><br />
    <form method="post" action="/spaces/go/">{% csrf_token %}
      <select name="spaces">
        {% for space in spaces %}
          <option>{{ space.name }}</option>
        {% empty %}
          <option>{% trans "No spaces" %}</option>
        {% endfor %}
      </select>
      <input type="submit" value="{% trans 'Go' %}" />
    </form>
</div>
[...]

views.py

class GoToSpace(RedirectView):
    url = "/spaces/"

    def get_redirect_url(self, **kwargs):
        self.place = get_object_or_404(Space, name = self.request.POST['spaces'])
        return self.place.url

urls.py

from django.conf.urls.defaults import *
from e_cidadania.apps.spaces.views import GoToSpace

urlpatterns = patterns('',

    (r'^go/', GoToSpace.as_view()),

)

Что яя делаю не так?

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Вы не можете ссылаться на представление на основе классов в urls.py, просто ссылаясь на имя класса. * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * as_view *
 (r'^go/', go_to_space.as_view()),

Вы должны действительно следовать PEP8 и сделать имя вашего класса GoToSpace, что сделало бы отличие от функции более очевидным.

Кроме того, get_redirect_url является методом, поэтому он должен иметь self в качестве первого позиционного аргумента.

0 голосов
/ 13 мая 2011

решено:

RedirectView в django 1.3 только принимает запросы GET, я выполнял POST (как рекомендовано в django 1.2.x)

Эта проблема была исправлена ​​для django 1.3.x (тикет # 15739 )

...