tka*_*ran 2 python django django-models django-views
我目前正在学习Django库,并且感到很沮丧,因为我收到了DidsNotExist错误(状态= 500)而不是404页面错误,我尝试将debug = False改为打开,但是我收到的只是一个500状态页面代替。
class CategoryView(generic.ListView):
model = Category
template_name = 'rango/category.html'
allow_empty = False
try:
def get_context_data(self, *args, **kwargs):
context = super(CategoryView, self).get_context_data(*args, **kwargs)
category_name = decode_url(self.kwargs['category_name_url'])
category = Category.objects.get(name = category_name)
pages = Page.objects.filter(category = category)
context['category'] = category
context['pages'] = pages
return context
except Category.DoesNotExist:
raise Http404
Run Code Online (Sandbox Code Playgroud)
追溯:
不存在于/ rango / category / Perl /
类别匹配查询不存在。
追溯:get_response 114中的文件“ /Library/Python/2.7/site-packages/django/core/handlers/base.py”。response = wrapd_callback(request,* callback_args,** callback_kwargs)File“ /Library/Python/2.7 /site-packages/django/views/generic/base.py”在视图69中。return self.dispatch(request,* args,** kwargs)File“ /Library/Python/2.7/site-packages/django/views/派发87中的“ generic / base.py”。返回处理程序(请求,* args,** kwargs)在152.上下文中的文件“ /Library/Python/2.7/site-packages/django/views/generic/list.py”。 = get_context_data 47中的“ /Users/justahack/Documents/Python/tango_with_django_project/rango/views.py”文件中的self.get_context_data()文件。category = Category.objects。get(name = category_name)文件151中的“ /Library/Python/2.7/site-packages/django/db/models/manager.py”。return self.get_queryset()。get(* args,** kwargs)File 307中的“ /Library/Python/2.7/site-packages/django/db/models/query.py”。self.model._meta.object_name)
异常类型:/ rango / category / Perl /处的DidsNotExist异常值:类别匹配查询不存在。
任何帮助深表感谢。
问题是try / except块在方法之外,并且无法捕获内部的异常。要解决此问题,请将try / except放入方法中:
def get_context_data(self, *args, **kwargs):
context = super(CategoryView, self).get_context_data(*args, **kwargs)
category_name = decode_url(self.kwargs['category_name_url'])
# HERE
try:
category = Category.objects.get(name = category_name)
except Category.DoesNotExist:
raise Http404
pages = Page.objects.filter(category = category)
context['category'] = category
context['pages'] = pages
return context
Run Code Online (Sandbox Code Playgroud)
另外,404如果对象不存在,还有一种更好的抛出方法-使用get_object_or_404()快捷方式:
def get_context_data(self, *args, **kwargs):
context = super(CategoryView, self).get_context_data(*args, **kwargs)
category_name = decode_url(self.kwargs['category_name_url'])
category = get_object_or_404(Category, name = category_name)
pages = Page.objects.filter(category = category)
context['category'] = category
context['pages'] = pages
return context
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2193 次 |
| 最近记录: |