【发布时间】:2018-04-25 04:21:40
【问题描述】:
我正在 Django at a glance | Django documentation | Django 上学习 Django
在引入 URLconf 的时候是这样写的:
要为应用程序设计 URL,您需要创建一个名为 URLconf 的 Python 模块。您的应用的目录,其中包含 URL 模式和 Python 回调函数之间的简单映射。
尽管如此,回调函数并没有被调用。
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() 才能调用。
如果不调用,它是如何工作的?我假设有一个装饰器在父类中处理它。
我查了urldjango.conf.urls | Django documentation | Django的源码
关键语句是:
elif callable(view):
return RegexURLPattern(regex, view, kwargs, name)
我继续探索LocaleRegexProvider,RegexURLPatterndjango.urls.resolvers | Django documentation | Django。
没有找到合适的代码调用回调函数views.year_archive
它的工作原理是什么?
【问题讨论】:
-
你有什么错误吗?因为
DEBUG=TrueDjango 应该说请求的 Url 不匹配任何模式,所以我们可以在开始时定义从哪里开始分析。并且函数必须作为对象views.year_archive不带括号传递,因为这样你会传递结果回调。
标签: django django-urls