如何使用 get vars 从 Web2Py URL 中省略 NoneType

How to omit NoneType from Web2Py URLs with get vars

我知道是否可以通过一些 if 语句和重复的代码来完成,但我想知道是否有更优雅的方式来处理这种情况,因为它在我看来而且我不喜欢大代码块在他们中。 我有两个按钮,打印和 CSV。他们 link 的 URL 设置如下:

<a class="btn btn-primary" href="{{=URL('teacher', 'classdata', args=request.args, vars={'view':'print', 'header':header, 'student':student})}}" target="_blank">Print</a>
<a class="btn btn-primary" href="{{=URL('teacher', 'classdata', args=request.args, vars={'view':'csv', 'header':header, 'student':student})}}" target="_blank">Download CSV</a>

我在这里遇到的问题是学生和 header 都可以是 None,但他们不能都不是 None,我正在寻找one-liner 问题的解决方案。就像我说的,我知道我可以制作一些 if/else 块,例如:

{{if student:}}
    <a class="btn btn-primary" href="{{=URL('teacher', 'classdata', args=request.args, vars={'view':'print', 'student':student})}}" target="_blank">Print</a>
    <a class="btn btn-primary" href="{{=URL('teacher', 'classdata', args=request.args, vars={'view':'csv', 'student':student})}}" target="_blank">Download CSV</a>
{{elif header:}}
    <a class="btn btn-primary" href="{{=URL('teacher', 'classdata', args=request.args, vars={'view':'print', 'header':header})}}" target="_blank">Print</a>
    <a class="btn btn-primary" href="{{=URL('teacher', 'classdata', args=request.args, vars={'view':'csv', 'header':header})}}" target="_blank">Download CSV</a>
{{else:}}
    <a class="btn btn-primary" href="{{=URL('teacher', 'classdata', args=request.args, vars={'view':'print'})}}" target="_blank">Print</a>
    <a class="btn btn-primary" href="{{=URL('teacher', 'classdata', args=request.args, vars={'view':'csv'})}}" target="_blank">Download CSV</a>
{{pass}}

但这看起来很糟糕。如果没有什么比这更简洁的了,真可惜,我可以随波逐流,但我更喜欢能带上一两行的东西,下次再出现这种情况时

您可以使用字典理解来过滤掉 None 个值:

vars={k:v for k,v in [('view', 'print'), ('header', header), ('student', student)] if v is not None}