Django URLconf中的回调函数对象没有被调用

The callback function object in Django URLconf is not called

我正在 Django at a glance | Django documentation | Django

学习 Django

引入URLconf时是这样写的:

To design URLs for an app, you create a Python module called a URLconf. A table of contents for your app, it contains a simple mapping between URL patterns and Python callback functions.

然而,没有调用回调函数。

mysite/news/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'^articles/([0-9]{4})/$', views.year_archive),
]
print('callback funtion:',views.year_archive)

输出:

callback function: <function views.year_archive at 0x1039611e0>

所以它是一个没有被调用的函数对象。

我想应该是views.year_archive()才能调用。

如果不调用,它是如何工作的?我假设有一个装饰器在父 class.

中处理它

我查看了urldjango.conf.urls | Django documentation | Django

的源代码

关键语句是:

 elif callable(view):
        return RegexURLPattern(regex, view, kwargs, name)

我继续探索 LocaleRegexProviderRegexURLPattern django.urls.resolvers | Django documentation | Django。 没有找到合适的代码来调用回调函数views.year_archive

它的工作原理是什么?

只要对给定的 url 模式发出请求,Django 就会自动调用回调视图函数。

要了解其工作原理,请查看此示例:

>>> def a():
        print("Called function a")

>>> def b():
        print("Called function b")

>>> def c(callback):
        # call the callback function like this
        callback()

>>> c(a)
Called function a
>>> c(b)
Called function b

基本上,这就是 Django 的 url 函数的工作方式。