You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Phoenix的sigil_p(~p)生成带摘要哈希的资源URL?

解决Phoenix中sigil_p(~p)生成静态资源URL报错的问题

错误原因

sigil_p(~p)对路径插值有严格规则:插值内容必须是完整的路径段,不允许在插值变量后直接拼接文件后缀(比如.jpg)。你写的~p"/images/animals/#{animal}.jpg"会被解析为插值#{animal}后紧跟.jpg,而.jpg不符合路径段的起始要求(路径段需以/开头或为完整文件名),因此抛出ArgumentError。

解决方案

以下两种写法均可替代原有的static_url调用,生成包含base path和摘要哈希的完整URL:

方法1:提前拼接完整文件名

animal = Enum.random(["cat", "dog", "zebra"])
image_filename = "#{animal}.jpg"
full_path = MyAppWeb.Endpoint.static_url(~p"/images/animals/#{image_filename}")

方法2:在插值内部完成文件名拼接

animal = Enum.random(["cat", "dog", "zebra"])
full_path = MyAppWeb.Endpoint.static_url(~p"/images/animals/#{animal <> ".jpg"}")

补充:仅生成资源路径(不含域名)

如果不需要完整URL,只需要带哈希的资源路径,可使用Phoenix.VerifiedRoutes.static_path/2:

animal = Enum.random(["cat", "dog", "zebra"])
image_path = static_path(~p"/images/animals/#{animal <> ".jpg"}")

内容的提问来源于stack exchange,提问作者user4757175

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:13:28