考虑以下:
urls.py:
urlpatterns = patterns('',
('^test/$', ClassView.as_view()),
)
Run Code Online (Sandbox Code Playgroud)
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?
Run Code Online (Sandbox Code Playgroud)
我想重定向到ClassView的get函数(/ test /),但是当我尝试上面的时候,我得到:
NoReverseMatch at /test/
Run Code Online (Sandbox Code Playgroud)
所以它显然找到了URL但是说没有匹配?
你应该只是命名你的urlpattern并重定向到那个,这将是Django-ey最常用的方法.
它没有记录(所以不能保证在将来的Django版本中工作)但是redirect快捷方法可以采用视图功能,所以你几乎可以redirect(ClassView.as_view())...我说几乎因为这实际上不起作用 - 每次你打电话给as_view()你得到一个返回了新的视图函数,因此redirect无法识别出与urlconf中相同的视图.
所以要做你想做的事,你必须像这样更新你的urlconf:
from .views import test_view
urlpatterns = patterns('',
('^test/$', test_view),
)
Run Code Online (Sandbox Code Playgroud)
在你的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()
Run Code Online (Sandbox Code Playgroud)
但我仍然认为你应该采取另一种方式:
urlpatterns = patterns('',
url('^test/$', ClassView.as_view(), name="test"),
)
Run Code Online (Sandbox Code Playgroud)
.
class ClassView(View):
def get(self, request):
return HttpResponse("test")
def post(self, request):
# do something
return redirect("test")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12541 次 |
| 最近记录: |