2011-05-13 55 views
0

我目前正在尝试为基于新的django 1.3基于类的视图迁移基于功能的视图。首先,我改变了一个简单的RedirectView,但我无法让它工作,甚至最糟糕的是,我无法理解类视图是如何工作的。该机制很简单,我在索引页中有一个选择字段,用户选择一个选项并点击“开始”。该视图必须获得与该名称相对应的url并在那里重定向。无法使基于类的RedirectView工作

发送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()), 

) 

我什么d错了吗?

+1

你的urls.py怎么样? – 2011-05-13 11:42:19

+0

对不起,忘了:) – 2011-05-13 11:53:30

回答

0

解决:

RedirectView的在Django 1.3 接受(如Django的1.2.x的建议)

这个问题是固定的Django的1.3.x的GET请求,我在做一个POST (ticket #15739

1

只能通过引用类的名称来引用urls.py中的基于类的视图。正如well documented,你需要调用类方法as_view

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

你真的应该遵循PEP8,让你的类名GoToSpace,这将使从比较明显的功能差别。

另外,get_redirect_url是一种方法,所以它应该有self作为第一个位置参数。

+0

关于PEP8我知道,但是因为我在做一个测试,所以我不介意。事情是,我可能会忘记改名之后。感谢提醒。我会在几分钟内测试代码:) – 2011-05-13 14:05:18

+0

测试代码会给我一个405错误:S我会用新代码更新问题 – 2011-05-13 14:23:49