django视图功能可以互相覆盖吗?

时间:2012-06-20 05:48:42

标签: django django-views

我正在阅读django教程,我想知道当你在views.py中有两个同名函数时会发生什么?

例如:

def results(request, poll_id):
   p = get_object_or_404(Poll, pk=poll_id)
   return render_to_response('polls/results.html', {'poll': p})

def results(request, poll_id):
    return HttpResponse("You're looking at the results of poll %s." % poll_id)

当我运行代码时,底部函数是被调用的函数。这是如何工作的?

2 个答案:

答案 0 :(得分:5)

在Python中,方法和函数可以使用任意数量的参数;这使得不需要使用不同的功能“签名”来支持传递的不同类型的参数;这是函数重载的常见用例。请参阅python文档中的4.7.3. Arbitrary Argument Lists

调用第二个方法的原因是因为在使用相同的名称(和相同的参数列表)定义方法定义时,只需覆盖它。对于python,它与:

相同
>>> x = 1
>>> x = 'Hello'
>>> print x
Hello

您刚刚重新定义了相同的方法,因此它使用了最后一个定义。

答案 1 :(得分:1)

如果我没有误会,你需要使用类,如果你需要扩展或覆盖视图方法......或者使用“if”语句:)

https://docs.djangoproject.com/en/dev/topics/class-based-views/

在你的例子中,那只是python的正常行为......从左上角读取文件..然后它编译并使用它......