web2py - 如果我想在视图中使用它,我应该在哪里导入函数?

web2py - Where do I import a function if I want to use it in a view?

我在视图中定义了一个变量,如下所示:

{{import datetime}}
{{top10 = db( db.table.date > datetime.datetime.now() ).select()[:10]}}

然后继续使用该变量。

因为这是在我想扩展的视图中,所以我宁愿不在控制器中定义该变量然后传递它,这就是我按我的方式实现的原因。

我也不喜欢在视图中导入内容。

除了 (a) 在视图中导入 (b) 在视图中定义变量,是否有替代方法?如果这是一个好习惯,我很乐意保留它。

谢谢!

您在模型文件中添加到环境中的任何内容都将在视图中可用,因此您可以在任何模型文件中包含导入语句。但是,我不认为有任何充分的理由不在视图中进行导入,考虑到模块实际上在那里使用(而不是在模型文件中),这可能更有意义。

如果您的目标是最小化视图中的逻辑,那么更好的方法可能是将这两行都移动到模型文件中(如果您只需要 top10,则可以使用 conditional models特定 controllers/functions).

的变量

此外,在这种情况下,您真的不需要 datetime 模块,因为您可以使用 request.now 代替 datetime.datetime.now()(唯一的区别是 request.now 会提前几毫秒计算出来,因为它的值是在请求开始时由框架填充的)。

此外,您可以使用 limitby 将 select 限制为前 10 条记录,而不是 select 搜索所有匹配记录,然后使用Python 提取前 10 个:

top10 = db(db.table.date > request.now).select(limitby=(0, 10))

最后,如果前10条记录不经常变化,你可以考虑caching the select