Django 基于类的通用视图准备

2024-05-14 18:09:29 发布

您现在位置:Python中文网/ 问答频道 /正文

请考虑以下几点:

网址.py:

urlpatterns = patterns('',
    ('^test/$', ClassView.as_view()),
)

视图.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/

所以很明显它找到了网址,但是说没有匹配的?


Tags: topytestselfgetreturnrequestdef
3条回答

可能您应该将名称设置为urlpattern并重定向到该名称?

你应该命名你的urlpattern并重定向到它,这将是最Django ey的方法。

它没有文档记录(所以不能保证在以后的Django版本中可以工作),但是redirect快捷方法可以使用一个view函数,所以您可以几乎执行redirect(ClassView.as_view())…我说这几乎是因为这实际上不起作用-每次您调用as_view()时,都会返回一个新的视图函数,所以redirect不认为与urlconf中的视图相同。

所以要想做你想做的,你必须像这样更新urlconf:

from .views import test_view

urlpatterns = patterns('',
    ('^test/$', test_view),
)

在你看来

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")
def post(self, request, *args, **kwargs):
    return HttpResponseRedirect(request.path)

这将重定向到与您的post()相同的URL,然后由您的get()处理。

相关问题 更多 >

    热门问题