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。
我在视图中定义了一个变量,如下所示:
{{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。