elixir - 在 Elixir Phoenix 框架项目中允许子文件夹模板是否有一些缺点?
问题描述
默认情况下,不能使用子文件夹在Elixir Phoenix 框架中呈现部分模板,但可以在 web_app 模块视图定义中进行更改。这是我在开始一个新的 Phoenix 项目时总是做出的改变之一。
def view do
quote do
use Phoenix.View,
root: "lib/demo_web/templates",
namespace: DemoWeb,
# for template subfolders usage
pattern: "**/*"
.....
end
end
所以我想知道如果默认情况下不可能,可能有一个很好的理由。
有人告诉我这个,但我不明白:
如果您将模板嵌套在已经有视图模块设置的外部文件夹中,则内部模板也将被编译到外部视图模块中,这可能会出现问题。
请你能解释一下它是怎么出问题的吗?
解决方案
通过允许模板的子文件夹,您基本上是在对 phoenix 说每个子文件夹都应该编译到相应的顶级视图中。
对于一个没有很多页面的小型项目来说,这可能不是问题,但想象一下您开始有一些更复杂的东西,您决定嵌套视图?
我什至不知道 Phoenix 在这种情况下会如何反应,因为基本上这意味着您的模板将在两个不同的视图中编译......
如果它不起作用,您可能会花时间找出原因,如果确实如此,您可能会在某一时刻在顶级和子文件夹视图中使用相同的方法名称,在这种情况下将不再清楚你指的是哪一个。
看一下模板指南,最后一部分称为“跨视图共享模板”,它说:
通常,我们发现需要在应用程序的不同部分以相同的方式呈现小块数据。将这些模板移动到他们自己的共享目录中是一个很好的做法,以表明它们应该在应用程序的任何地方都可用。
这应该可以在不更改默认 Phoenix 行为的情况下为您提供所需的大部分内容
推荐阅读
- django - 运行 django hello world web 服务器时出错
- python - 如何检查哪个 Jupyter 笔记本有“%run”另一个笔记本?
- r - 如何合并两列并在 r 中保留第三列?
- spring-retry - 是否可以根据 HttpStatus 状态 200 或 207 在 spring-retry 中设置 RetryPolicy?
- python - 使用 Matplotlib 将 R 绘图代码重写为 Python 但没有得到相同的结果
- node.js - 发生 Heroku h12 和 503 错误
- angular - 在 Angular 8 中注入 TranslateService 时无法解决所有参数错误
- apache-spark - 自动将 S3 与 Hive 元存储同步
- python - 少数请求导致 503 错误(nginx、gunicorn、金字塔)
- c# - 如何使用 SDK4 从带有 Bot 的 MS Teams 获取用户电子邮件?