Python 为什么我要检查';如果id不是None';在这个代码中?

Python 为什么我要检查';如果id不是None';在这个代码中?,python,django,Python,Django,我正在学习一个分别名为“原始删除基于类的视图”、“原始更新”、“列表”和“基于详细类的视图”的教程。除了一个,我什么都懂 在课程列表.html中,我有以下链接: <a class="delete-btn" href="{% url 'courses:course-delete' obj.id %}">Delete</a> 先谢谢你 编辑:url.py app_name = 'courses' urlpatterns = [ path('courses/<i

我正在学习一个分别名为“原始删除基于类的视图”、“原始更新”、“列表”和“基于详细类的视图”的教程。除了一个,我什么都懂

课程列表.html
中,我有以下链接:

<a class="delete-btn" href="{% url 'courses:course-delete' obj.id %}">Delete</a>
先谢谢你

编辑:url.py

app_name = 'courses'
urlpatterns = [
    path('courses/<int:id>/delete/',
         CourseDeleteView.as_view(), name='course-delete'),
]
app_name='courses'
URL模式=[
路径('courses//delete/',
CourseDeleteView.as_view(),name='course-delete'),
]

我认为没有任何理由这样做,如果
id
None
,那么
get\u object\u或\u 404
将引发
Http404

政府对此很清楚:

以下示例从
MyModel
获取主键为1的对象:

from django.shortcuts import get_object_or_404

def my_view(request):
    obj = get_object_or_404(MyModel, pk=1)
此示例相当于:

from django.http import Http404

def my_view(request):
    try:
        obj = MyModel.objects.get(pk=1)
    except MyModel.DoesNotExist:
        raise Http404("No MyModel matches the given query.")

一般来说,像这样的编写条件是一种很好的实践,因为您希望确保代码永远不会失败。在web应用程序中,它甚至更重要,因为URL可以从任何地方访问

在这个特定的示例中,您是对的,如果ID不存在,路由本身将失败。但是,如果我们将id重新构造为一个查询参数(如
/courses/delete?id=x
),那么代码的这一部分就变得必要了


基本上,它是一个。

你的url是什么?我刚才在问号中补充说,
get\u object\u或_404
完全有意义,但我认为没有id你无法访问你的代码。我猜如果有人输入无效
id
的url,或试图访问删除的对象,它将保护例程,因为不再有可操作的对象-这将抛出错误。当然,Python的方法是使用“
try
/
except
”而不是
if
检查。@lucasgcb
get\u object\u或\u 404
能够处理此场景。如果该对象被删除,它将抛出404。谢谢雅克·高丁,上帝保佑你。我将忽略检查无id。
from django.http import Http404

def my_view(request):
    try:
        obj = MyModel.objects.get(pk=1)
    except MyModel.DoesNotExist:
        raise Http404("No MyModel matches the given query.")