当指定的对象不存在时,如何从Django DetailView重定向?

时间:2013-01-11 21:14:08

标签: django detailview

所以,现在当我的DetailView子类没有使用PK(取自URL)找到对象时,我看到了404.html模板页面。我宁愿做的只是重定向到另一个URL。这是我的网址模式:

url(r'^(?P<pk>[0-9]+)/$', DeviceDetailView.as_view(
    template_name='devices/detail.html',
    queryset=Device.objects.all(),
    context_object_name="device",
)),
url(r'^$', FullListView.as_view(template_name='devices/devices.html',)),

所以,如果我的url看起来像/ devices / 8 /,它使用8作为主键。当数据库中存在8时,工作得很好。但是,当8不存在时,它将转到404页面。我宁愿它做的是去一个列表 - 事实上,当最后一个url时列出的FullListView(这是当url看起来像/ devices / nonnumericstuff /.

时发生的事情)

看起来应该很容易,不是吗?我不希望所有的404都去那里,所以我不能使用handler404。

3 个答案:

答案 0 :(得分:14)

如果查询集中不存在该对象,则DetailView的{​​{3}}会引发Http404异常。您可以在视图的get_object method中捕获异常,而不是覆盖get_object方法:

from django.http import Http404
from django.views.generic import DetailView
from django.shortcuts import redirect

class MyDetailView(DetailView):

    def get(self, request, *args, **kwargs):
        try:
            self.object = self.get_object()
        except Http404:
            # redirect here
            return redirect(url)
        context = self.get_context_data(object=self.object)
        return self.render_to_response(context)

答案 1 :(得分:1)

您应该重新定义DetailView的def get_object(self):

question

中有类似的内容

答案 2 :(得分:1)

常见情况

1,2,3 ..