diff --git a/kernel/sql/av.go b/kernel/sql/av.go index 5ddd822a6..4815dabb9 100644 --- a/kernel/sql/av.go +++ b/kernel/sql/av.go @@ -18,6 +18,7 @@ package sql import ( "bytes" + "fmt" "strings" "text/template" "time" @@ -389,6 +390,30 @@ func fillAttributeViewAutoGeneratedValues(attrView *av.AttributeView, ials map[s } } +func fillAttributeViewTemplateValue(value *av.Value, item av.Item, attrView *av.AttributeView, ials map[string]map[string]string, items map[string][]*av.KeyValues) (err error) { + itemID := item.GetID() + + switch value.Type { + case av.KeyTypeTemplate: // 渲染模板字段 + keyValues := items[itemID] + ial := ials[itemID] + if nil == ial { + ial = map[string]string{} + } + content, renderErr := RenderTemplateField(ial, keyValues, value.Template.Content) + value.Template.Content = content + if nil != renderErr { + key, _ := attrView.GetKey(value.KeyID) + keyName := "" + if nil != key { + keyName = key.Name + } + err = fmt.Errorf("database [%s] template field [%s] rendering failed: %s", getAttrViewName(attrView), keyName, renderErr) + } + } + return +} + func fillAttributeViewNilValue(value *av.Value, typ av.KeyType) { value.Type = typ switch typ { diff --git a/kernel/sql/av_gallery.go b/kernel/sql/av_gallery.go index 3a59caeef..c13d59f87 100644 --- a/kernel/sql/av_gallery.go +++ b/kernel/sql/av_gallery.go @@ -121,27 +121,12 @@ func RenderAttributeViewGallery(attrView *av.AttributeView, view *av.View, query } // 最后单独渲染模板字段,这样模板字段就可以使用汇总、关联、创建时间和更新时间字段的值了 - var renderTemplateErr error for _, card := range ret.Cards { for _, value := range card.Values { - switch value.ValueType { - case av.KeyTypeTemplate: // 渲染模板字段 - keyValues := cardsValues[card.ID] - ial := ials[card.ID] - if nil == ial { - ial = map[string]string{} - } - content, renderErr := RenderTemplateField(ial, keyValues, value.Value.Template.Content) - value.Value.Template.Content = content - if nil != renderErr { - key, _ := attrView.GetKey(value.Value.KeyID) - keyName := "" - if nil != key { - keyName = key.Name - } - renderTemplateErr = fmt.Errorf("database [%s] template field [%s] rendering failed: %s", getAttrViewName(attrView), keyName, renderErr) - } + err := fillAttributeViewTemplateValue(value.Value, card, attrView, ials, cardsValues) + if nil != err { + renderTemplateErr = err } } } diff --git a/kernel/sql/av_table.go b/kernel/sql/av_table.go index ca1f3a6b0..8f85baa4c 100644 --- a/kernel/sql/av_table.go +++ b/kernel/sql/av_table.go @@ -127,27 +127,12 @@ func RenderAttributeViewTable(attrView *av.AttributeView, view *av.View, query s // 最后单独渲染模板列,这样模板列就可以使用汇总、关联、创建时间和更新时间列的值了 // Database table view template columns support reading relation, rollup, created and updated columns https://github.com/siyuan-note/siyuan/issues/10442 - var renderTemplateErr error for _, row := range ret.Rows { for _, cell := range row.Cells { - switch cell.ValueType { - case av.KeyTypeTemplate: // 渲染模板列 - keyValues := rowsValues[row.ID] - ial := ials[row.ID] - if nil == ial { - ial = map[string]string{} - } - content, renderErr := RenderTemplateField(ial, keyValues, cell.Value.Template.Content) - cell.Value.Template.Content = content - if nil != renderErr { - key, _ := attrView.GetKey(cell.Value.KeyID) - keyName := "" - if nil != key { - keyName = key.Name - } - renderTemplateErr = fmt.Errorf("database [%s] template field [%s] rendering failed: %s", getAttrViewName(attrView), keyName, renderErr) - } + err := fillAttributeViewTemplateValue(cell.Value, row, attrView, ials, rowsValues) + if nil != err { + renderTemplateErr = err } } }