django - Django:处理用户输入错误的 URL 模式导致 404 的情况
问题描述
如何防止用户输入数据库中不存在的 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
)
解决方案
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 %}
入您的模板,并显示合适的错误消息。
推荐阅读
- postgresql - Sequelize 如何构建应用程序的聊天部分?
- javascript - 将 9 位数字转换为可读日期
- python - 具有不可见字符的新行不会换行吗?
- c++ - C++ 堆栈溢出,如何增加每个线程的堆栈大小?
- c - D-Bus 返回 UnkownMethod - 表示路径上的对象上没有此类接口
- java - 在 Gridworld 中创建具有位置的新 Actor
- javascript - 在反应 js 中使用效果函数说要导入,而最终工作正常
- javascript - 在两个html之间添加空格
- c++ - 函数指针引用
- reactjs - 在提供父组件状态的上下文提供程序中测试组件失败