在 django 的 urlconf 中传递 lambda 是啥意思?

Posted

技术标签:

【中文标题】在 django 的 urlconf 中传递 lambda 是啥意思?【英文标题】:what does passing lambda in urlconf in django mean?在 django 的 urlconf 中传递 lambda 是什么意思? 【发布时间】:2014-04-27 19:11:09 【问题描述】:

我在Djangobook 中遇到了这个code。我无法理解这是什么意思。

urlpatterns=pattern('django.views.generic',
                   url(r'^$','simple.direct_to_template',
                   kwargs=
                         'template':'index.html',
                         'extra_content':'item_list':lambda:Item.objects.all()
                          
                   )

并且在模板中,简单的迭代来显示项目

% for item in item_list %

上述网址中lambda的用途是什么?

P.S:我知道 lambdapython (anonymous function) 中的工作原理。但我想知道它在这里的用途。为什么不使用'extra_content':'item_list':Item.objects.all(),因为无论如何都会产生iterable

编辑:

如果我有

info_dict='queryset':Item.objects.all()

并将这个dict 传递给extra_content

'extra_content':'item_list':queryset

会不会和lambda一样(我在djangobook里见过这种例子

【问题讨论】:

【参考方案1】:
'extra_content':'item_list':Item.objects.all()

将在加载 URLconf 时进行评估,因此 item_list 将包含每个请求的相同项目。使用 lambda 告诉 Django 为每个请求调用该 lambda,这意味着 items_list 将随着新的 Items 在数据库中的添加、删除或编辑而改变。

【讨论】:

@eagertoLearn:我实际上不确定。我只是一个 lambda,但试试你的方法,看看会发生什么。

以上是关于在 django 的 urlconf 中传递 lambda 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

在测试期间,如何覆盖 urlconf 中使用的 Django 设置?

在单个 Django 项目中提供不同的 urlconfs

将模板变量从 URL 传递到 Django 中的 FormPreview

django 配置URLconf和获取值

django基础知识之URLconf:

Django:在中间件中用 request.urlconf 覆盖 ROOT_URLCONF