【问题标题】:How to override erb with liquid?如何用液体覆盖erb?
【发布时间】:2013-10-14 09:13:54
【问题描述】:

here 所述,我已使用prepend_view_path 将主题目录添加到我的应用程序中。它按预期工作。我现在可以在 app/themes/my_theme/views 下的应用程序中添加视图结构

现在,我希望能够通过放入 .liquid 文件来覆盖 erb 模板,该文件将立即呈现控制器操作。

比如我想覆盖app/views/pages/home.html.erb:

<h1><%= t 'it_works' %></h1>

...与app/themes/my_theme/views/pages/home.liquid

<h1>It works with {{ "liquid" }}</h1>

我不想指定视图路径数组(维护会很糟糕),而只需将.liquid 作为层添加到模板引擎即可。然而,也许有一个不能被覆盖的受保护视图的黑名单(例如app/views/admin/*

【问题讨论】:

    标签: ruby-on-rails liquid templating-engine


    【解决方案1】:

    你有液体模板处理程序吗?否则 Rails 不会知道你想用 .liquid 文件做什么。见这篇博文:http://royvandermeij.com/blog/2011/09/21/create-a-liquid-handler-for-rails-3-dot-1/

    对于您的第二个问题:不使用 app/views/admin/* 的主题,您应该确保您有一个不使用 prepend_view_path 的 AdminController。

    【讨论】:

    • +1 用于“黑名单”解决方案。现在查看处理程序博客文章。
    【解决方案2】:

    根据documentation你可以使用prepend_view_path

    将以下内容添加到您的 ApplicationController:

    before_filter :set_theme_path
    
    def set_theme_path
      prepend_view_path "app/themes/#{current_theme}"
    end
    

    因此,Rails 应该优先于 app/views/**/* 中的默认视图查找主题特定目录中的任何视图

    【讨论】:

    • 是的,我做到了。但这只读取erb 文件。我想使用liquid 而不是erb
    • 您如何命名您的模板?它们可能需要命名为 foo.html.liquid
    • 对一个没有错的答案投反对票也有点不公平。正如你承认的那样,你做了我发布的事情。您的环境中可能存在一百万个问题,您没有在问题中披露或详细说明。
    • 投反对票是公平的,因为我在我的问题中说过我已经在使用 prepend_view_path。答案似乎不是来自真正花时间理解问题的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多