在 Web2py 中只显示有记录的字段
Only displaying fields with a record in Web2py
我在 db.define_table('mydatabase',
中有以下字段 Field('a_1'),
...到 Field('a_9')
然后 Field('b_1'),
...到 Field('b_9')
和 Field('c_1','upload'),
...到 Field('c_9','upload')
这样一共是27个Fields
并非所有 a
、b
和 c
的 9 Fields
都会始终有记录。但是,如果 Field('a_1')
有记录,那么所有其他字段也会有记录。
在视图中,我只想显示 Fields
有一条记录。我通过在 View
中使用 if
语句实现了这一点。这按预期工作,但我想知道这是否是实现此目标的最佳方法,如果这不是最佳方法,我想知道为什么这样我可以学习和改进我的代码。
这是我在 Controller
中的内容:
def show():
x = db.mydatabase(request.args(0,cast=int))
return dict(x=x)
这是我在 View
:
{{if x.a_1:}}
<p style="color:white">some text {{=x.a_1}}</p>
<a class="link" href="{{=URL('download', args=x.c_1)}}"><p>some text</p></a>
<p>some text {{=x.b_1}}</p><br>
{{pass}}
然后我在View
中重复上面的if
语句9次,每次在a_1
、b_1
和c_1
中相应地改变数字.
这很好用,但有更好的方法吗?
您可以使用 for
循环来代替重复您的代码九次:
{{for i in xrange(1, 10):}}
{{if x['a_%s' % i]:}}
<p style="color:white">some text {{=x['a_%s' % i]}}</p>
<a class="link" href="{{=URL('download', args=x['c_%s' % i])}}"><p>some text</p></a>
<p>some text {{=x['b_%s' % i]}}</p><br>
{{pass}}
{{pass}}
我在 db.define_table('mydatabase',
中有以下字段 Field('a_1'),
...到 Field('a_9')
然后 Field('b_1'),
...到 Field('b_9')
和 Field('c_1','upload'),
...到 Field('c_9','upload')
这样一共是27个Fields
并非所有 a
、b
和 c
的 9 Fields
都会始终有记录。但是,如果 Field('a_1')
有记录,那么所有其他字段也会有记录。
在视图中,我只想显示 Fields
有一条记录。我通过在 View
中使用 if
语句实现了这一点。这按预期工作,但我想知道这是否是实现此目标的最佳方法,如果这不是最佳方法,我想知道为什么这样我可以学习和改进我的代码。
这是我在 Controller
中的内容:
def show():
x = db.mydatabase(request.args(0,cast=int))
return dict(x=x)
这是我在 View
:
{{if x.a_1:}}
<p style="color:white">some text {{=x.a_1}}</p>
<a class="link" href="{{=URL('download', args=x.c_1)}}"><p>some text</p></a>
<p>some text {{=x.b_1}}</p><br>
{{pass}}
然后我在View
中重复上面的if
语句9次,每次在a_1
、b_1
和c_1
中相应地改变数字.
这很好用,但有更好的方法吗?
您可以使用 for
循环来代替重复您的代码九次:
{{for i in xrange(1, 10):}}
{{if x['a_%s' % i]:}}
<p style="color:white">some text {{=x['a_%s' % i]}}</p>
<a class="link" href="{{=URL('download', args=x['c_%s' % i])}}"><p>some text</p></a>
<p>some text {{=x['b_%s' % i]}}</p><br>
{{pass}}
{{pass}}