0

在我的应用程序中,我使用 SQLTABLE 来显示内容。我必须为此表数据指定一些 css 样式。请让我知道如何将样式设置为 SQLTABLE 数据。

例子:

#percengate datatype: decimal(5,2)
rows = db().select(db.t_tax.id,db.t_tax.percentage)
db.t_tax.percentage.represent = lambda r,v: str(v.percentage)+'%'
columns = ['t_tax.id','t_tax.percentage']
headers = {
    't_tax.id':{'label':T('id'),
    'class':'', #class name of the header
    'width':'', #width in pixels or %
    'truncate': 50, #truncate the content to...
    'selected': False #agregate class selected to this column
    },
    't_tax.percentage':{'label':T('Tax'),
    'class':'', #class name of the header
    'width':'', #width in pixels or %
    'truncate': 50, #truncate the content to...
    'selected': False #agregate class selected to this column
    }
}
table = SQLTABLE(rows,columns=columns,headers=headers,_width='100%',_class='datatable')

在此表中,我想右对齐百分比列数据。现在它显示为左对齐的普通字符串(10.00%,20.00%)。我找不到任何选项来指定仅与 percetage 列对齐。

我将不胜感激任何评论。

4

1 回答 1

3

您是直接创建 SQLTABLE 吗?

你有没有尝试过:

x = SQLTABLE(rows, ..., _id='my-sqltable')

然后您可以将#my-sqltable其用作选择器的第一部分。例如,要突出显示每隔一行:

#my-sqltable tr:nth-child(odd) td { background: gray; }

无法将特定样式传递给 sql 表中的不同列/单元格。通常你会这样做x = SQLTABLE(..., _style=...),但即使那样,也没有简单的方法来定位你想要的列。

但是,您可以使用“headers”关键字的“class”参数创建一个将附加到给定列的类。将类设置为“some-class”并检查生成的标记——你应该看到你有 th.some-class 和 td.some-class。您可以使用该类来定位您想要样式的元素。同样,SQLTABLE 无法将“样式”属性附加到生成的 TD 节点。

您也许可以使用“extracolumns”并使用 lambda 函数(类似于{'content': lambda row: DIV(row.some_val, _style='text-align: right'), ...})设置内容,该函数会将内容包装在 DIV 中并允许您正确对齐它,但实际上这些类要容易得多。你可能需要做这样的事情来使你的 SQLTABLE 看起来一样而不依赖于外部样式表......我只是不确定它是否会工作。

如果您担心单独更新 css 或让您的代码更加模块化,您总是可以将 STYLE 元素传递给视图,或者<style>...</style>直接在使用该样式的视图中创建一个外壳。虽然在 HTML4x/XHTML 中将样式标签放在 head 元素之外在技术上是“无效的”,但它仍然会解析。此外,在 HTML5 中,这完全是 100% 有效的。

无论如何,我希望我已经回答了你的问题。我强烈建议只使用一个类——可能只是.align-right { text-align: right }在你的基础 css 中,因为这个类可以用于任何数量的东西。这已经被代码支持了!

如果这些选项都不可接受,恐怕您将不得不深入研究并编写自己的自定义 TABLE 类。您也许可以将 SQLTABLE 子类化,并找出一种向 TABLE 中的数据列添加样式选项的好方法……我仍然认为类更好。

于 2012-07-31T15:09:40.913 回答