想要在一个笔记里,显示多个笔记与属性,这 TEMPLATER 代码正确吗?

我在obsidian 建立了一个笔记名字叫 “1. 卡片盒” ,里面连接了很多笔记如 “1.0 卢曼是谁” , “1.1 制作目的” .想要用 templater 插件,在笔记“1. 卡片盒” 显示多个笔记,想要像 DATAVIEW 这样显示有表格的。如下:

尝试以下代码,可是一直显示错误 Templater Error: Invalid file format, provide an obsidian link between quotes.

FYI,
Obsidian 版本: V1.7.5
代码保存在 TEMPLATES/TEMPLATES1

请问以下代码是不是错误了?需要怎么调整?

<%*
const notes = ["1.0 卢曼是谁", "1.1 制作目的"];  // 笔记名称列表
let output = "| filename | tags | date | author | literature |\n";
output += "|----------|------|------|--------|------------|\n";

for (let note of notes) {
    let file = await tp.file.find_tfile(note); // 查找文件
    if (file) {
        // 获取 YAML 属性
        let tags = await tp.file.get_yaml("tags", file) || "无";
        let date = await tp.file.get_yaml("date", file) || "无";
        let author = await tp.file.get_yaml("author", file) || "无";
        let literature = await tp.file.get_yaml("literature", file) || "无";

        // 添加到输出字符串
        output += `| [[${file.basename}]] | ${tags} | ${date} | ${author} | ${literature} |\n`;
    } else {
        output += `| ${note} | 文件未找到 | 无 | 无 | 无 |\n`;
    }
}

-%>
<%= output %>

“1.0 卢曼是谁” , “1.1 制作目的” 这两个笔记已经有 YAML 属性


tags:
date:
author:
literature:

没试出来, 我理解只在类似 tp.file.include("[[Template1]]") 关键词出现时, 才会报这个 Templater Error: Invalid file format, provide an obsidian link between quotes 错, 见 generate_include()

在没有用到 include 时, 似乎不该报这个, 不太熟悉这插件可能是调用方式导致的吧, 总之先不管这个了


我拿下面的代码试成功了, 大致这个意思?

<%*
const notes = ["1.0 卢曼是谁", "1.1 制作目的"];  // 笔记名称列表
let output = "| filename | tags | date | author | literature |\n";
output += "|----------|------|------|--------|------------|\n";

for (let note of notes) {
    let file = await tp.file.find_tfile(note); // 查找文件
    if (file) {
        // 获取 YAML 属性
        // debugger
        let fm = app.metadataCache.getFileCache(file).frontmatter;
        let tags = fm.tags || "无";
        let date = fm.date || "无";
        let author = fm.author || "无";
        let literature = fm.literature || "无";

        // 添加到输出字符串
        output += `| [[${file.basename}]] | ${tags} | ${date} | ${author} | ${literature} |\n`;
    } else {
        output += `| ${note} | 文件未找到 | 无 | 无 | 无 |\n`;
    }
}
-%>

<% output %>

代码大部分都对, 但是一楼的 await tp.file.get_yaml("tags", file) 没这语法

而 tp 里虽有个 tp.frontmatter 它好像只能取得自身笔记的属性, 怎么让它获取 “别的某个笔记的 YFM”, 我还不会

最后我是 app.metadataCache.getFileCache(file).frontmatter.tags 代替, 这才能用

1 个赞

谢谢谢谢谢谢你!解决了我的问题!

你提及tp.file.include("[[Template1]]") 时,我才发现在新笔记写的代码错误,应该是
tp.file.include(“[[Template1]]”)
而不是
<% tp.file.include(“Templates/Templates1”) %>

我复制了你的代码后,至于显示了我想要的表格了~