【问题标题】:The callback function object in Django URLconf is not calledDjango URLconf 中的回调函数对象没有被调用
【发布时间】: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)

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

它的工作原理是什么?

【问题讨论】:

  • 你有什么错误吗?因为DEBUG=True Django 应该说请求的 Url 不匹配任何模式,所以我们可以在开始时定义从哪里开始分析。并且函数必须作为对象views.year_archive 不带括号传递,因为这样你会传递结果回调。

标签: django django-urls


【解决方案1】:

每当对给定的 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 函数的工作原理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2020-04-08
    • 1970-01-01
    相关资源
    最近更新 更多