如何优化Directus API查询,仅获取指定语言的多语言内容字段?
解决Directus API仅获取指定语言翻译字段的问题
核心问题分析
你之前的请求存在两个关键错误:
- URL中出现了两个
?,这会导致第二个?后的参数被忽略,属于HTTP请求语法错误。 - 嵌套筛选的逻辑虽然方向正确,但因语法问题未生效,导致仍返回全量翻译内容。
正确的API请求示例
https://xxx/items/xxx_page?fields=*,page_contents.*,page_contents.translations.*&filter[languages_code]=it-IT&filter[page_contents][translations][languages_code][_eq]=it-IT
关键优化说明
- 修正URL参数格式:URL仅能有一个起始的
?,后续所有参数都用&连接,这是HTTP请求的基础规则。 - 精准过滤嵌套翻译:
filter[page_contents][translations][languages_code][_eq]=it-IT会确保page_contents关联的translations集合中,仅返回languages_code匹配it-IT的条目,而非返回全量翻译后再做过滤。 - 字段精简(可选):如果不需要模型的全部字段,可把
*替换为具体字段名(比如id,title,slug),进一步减少返回数据量,提升加载速度。
额外优化建议
若你的Directus版本支持**_locale参数**(针对内置多语言字段,而非自定义Translations集合),可以用更简洁的写法:
https://xxx/items/xxx_page?_locale=it-IT&fields=*,page_contents.*,page_contents.translations.*
该参数会自动过滤所有关联翻译字段中匹配指定语言的条目,无需手动编写多层filter。
内容的提问来源于stack exchange,提问作者Leonardo
相关产品推荐
相关产品推荐

