如何防止用户输入数据库中不存在的url值。例如,汽车有一个ID,因此导航到汽车将是
http://127.0.0.1:8000/car/1
,如果用户输入的ID不存在,则返回404,我该如何处理?
urlpatterns = [
path('', include('index.urls')),
path('cars/', include('car.urls')),
path('users/', include('user.urls')),
path('admin/', admin.site.urls),
]
这是我的“汽车”视图的一部分,因为我也有search_car,而且很长:
def get_car_by_id(request, id):
cars = Car.objects.all()
car_types = CarCategory.objects.all()
context = {'apartments': apartments, 'car_types': car_types,
'car': get_object_or_404(Car, pk=id)}
return render(
request, 'car/single_car.html', context
)
答案 0 :(得分:1)
def get_car_by_id(request, id):
cars = Car.objects.all()
car_types = CarCategory.objects.all()
context = {'apartments': apartments, 'car_types': car_types,
'car': get_object_or_404(Car, pk=id)}
return render(
request, 'car/single_car.html', context
)
您正在使用get_object_or_404
快捷方式。这是一种常见的方法,这意味着Django将显示404页面,而不是在对象不存在时崩溃。在设置中DEBUG = False
时,您只会看到真正的404页面。如果您拥有DEBUG = True
,则将看到黄色的404页面,以帮助调试问题。
如果您确实不想显示404页面,则不应使用get_object_or_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 %}
,并显示适当的错误消息。