所以,现在当我的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。
答案 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):
答案 2 :(得分:1)
常见情况
1,2,3 ..