请考虑以下事项:
urls.py:
urlpatterns = patterns('',
('^test/$', ClassView.as_view()),
)
views.py:
class ClassView(View):
def get(self, request):
return HttpResponse("test")
def post(self, request):
# do something
return redirect(ClassView.get(request)) # What should I do to redirect to a class here without specifying the path?
我想重定向到ClassView的get函数(/ test /),但是当我尝试上面的时候我得到:
NoReverseMatch at /test/
所以它显然找到了网址但是说没有匹配?
答案 0 :(得分:5)
你应该只为你的urlpattern命名并重定向到那个,这将是Django-ey最常用的方法。
没有记录(所以不能保证在将来的Django版本中工作),但redirect
快捷方法可以采用视图功能,因此你可以几乎做redirect(ClassView.as_view())
。 ..我说几乎是因为这实际上不起作用 - 每次你调用as_view()
时都会返回一个新的视图函数,所以redirect
无法识别出与您的urlconf中的视图相同。
所以要做你想做的事,你必须像这样更新你的urlconf:
from .views import test_view
urlpatterns = patterns('',
('^test/$', test_view),
)
在你的views.py
中class ClassView(View):
def get(self, request):
return HttpResponse("test")
def post(self, request):
# do something
return redirect(test_view)
test_view = ClassView.as_view()
但我仍然认为你应该采取另一种方式:
urlpatterns = patterns('',
url('^test/$', ClassView.as_view(), name="test"),
)
class ClassView(View):
def get(self, request):
return HttpResponse("test")
def post(self, request):
# do something
return redirect("test")
答案 1 :(得分:1)
您可能应该将名称设置为urlpattern并重定向到该名称吗?
答案 2 :(得分:0)
尝试返回self.get()
。我没有测试。但作为它的python代码它应该工作。如果您只想执行语句,请使用此选项。这不会返回我认为的任何HTTP 302状态。
答案 3 :(得分:0)
def post(self, request, *args, **kwargs):
return HttpResponseRedirect(request.path)
这将重定向到与post()
相同的网址,然后由get()
处理。