Django:处理用户输入错误URL模式导致404的情况
如何防止用户输入数据库中不存在的url值。例如,汽车有一个id,因此导航到汽车将是Django:处理用户输入错误URL模式导致404的情况,django,Django,如何防止用户输入数据库中不存在的url值。例如,汽车有一个id,因此导航到汽车将是 http://127.0.0.1:8000/car/1,如果用户输入的id不存在,则返回404,我如何处理 urlpatterns=[ 路径(“”,include('index.url')), 路径('cars/',包括('car.url'), 路径('users/',include('user.url')), 路径('admin/',admin.site.url), ] 这是我汽车视图的一部分,因为我也有搜索
http://127.0.0.1:8000/car/1
,如果用户输入的id不存在,则返回404,我如何处理
urlpatterns=[
路径(“”,include('index.url')),
路径('cars/',包括('car.url'),
路径('users/',include('user.url')),
路径('admin/',admin.site.url),
]
这是我汽车视图的一部分,因为我也有搜索车,这有点长:
def获取车辆id(请求,id):
cars=Car.objects.all()
car_types=CarCategory.objects.all()
context={'plants':公寓,'car\u type':car\u type,
“car”:获取对象或404(car,pk=id)}
返回渲染(
请求“car/single_car.html”,上下文
)
您正在使用get\u object\u或\u 404
快捷方式。这是一种常见的方法,意味着当对象不存在时,Django将显示404页面,而不是崩溃。只有当设置中的DEBUG=False
时,您才会看到真正的404页面。当您有DEBUG=True
时,您将看到黄色的404页面来帮助调试问题
如果确实不想显示404页面,则不应使用get\u object\u或\u 404
。您可以捕获DoesNotExist
异常
def get_car_by_id(request, id):
cars = Car.objects.all()
car_types = CarCategory.objects.all()
try:
car = Car.objects.get(pk=id)
except Car.DoesNotExist:
car = None
context = {'apartments': apartments, 'car_types': car_types,
'car': car }
return render(
request, 'car/single_car.html', context
)
现在,您可以在模板中检查
{%if car%}
,并显示适当的错误消息。您应该在视图中检查该错误消息。提供你的汽车视图。py
。不应该因为你发布的内容而撞车。也许你把404错误误认为崩溃了?@Gasanov没错,防止输入不存在的东西,它将返回404。
def get_car_by_id(request, id):
cars = Car.objects.all()
car_types = CarCategory.objects.all()
try:
car = Car.objects.get(pk=id)
except Car.DoesNotExist:
car = None
context = {'apartments': apartments, 'car_types': car_types,
'car': car }
return render(
request, 'car/single_car.html', context
)