1

我想生成一些模板页面Jekyll,然后Perl使用该模块的脚本将使用这些模板页面HTML::Template Perl。是否有可能让 Jekyll 单独留下 HTML::Template 的标签而完全忽略它们?

例如:

<tr>             <td>Name:               </td>  <td><TMPL_VAR NAME=NAME> </td> </tr>
<tr class="alt"> <td>Email:              </td>  <td><TMPL_VAR NAME=EMAIL></td> </tr>

我希望将页面呈现为 .html 文件,并且<TMPL_VAR NAME=...>保留单独的位,稍后后端Perl脚本会将此文件用作模板文件并填充<TMPL_VAR NAME=...>位所在的位置。

4

2 回答 2

2

您可以通过创建带有 .html 扩展名的源页面来保持 HTML(标准和 Perl HTML::Template 集)不变。当你这样做时,jekyll(至少从 0.11.2 开始)不会与源 HTML 混淆。您仍然可以使用 YAML 前端内容并放入液体标签。例如,这将作为具有 .html 扩展名的源文件工作。

---
layout: default
title: This is the post title
categories: ["miscellaneous"]
---

{{ page.title }}

<table>
<tr>             <td>Name:  </td>  <td><TMPL_VAR NAME=NAME> </td> </tr>
<tr class="alt"> <td>Email: </td>  <td><TMPL_VAR NAME=EMAIL></td> </tr>
</table>

从那里,您可以将 HTML::Template 标签完好无损地传递给您的二级处理。

于 2012-07-07T23:27:46.773 回答
1

使用我从我在 stackoverflow 上提出和回答的另一个问题中学到的知识,这些似乎是您的 3 个选项。其中一个@Alan W. Smith在回答这个问题时也偶然发现。

选项 #1: -HTML::Template有一个名为vanguard_compatibility_mode...来自 perldocs的开关

vanguard_compatibility_mode - 如果设置为 1,模块将期望看到除了标准语法之外看起来像 %NAME% 的 s。还设置 die_on_bad_params => 0。如果您不在 Vanguard Media 尝试使用旧格式模板,请不要担心这个。默认为 0。

选项 #2 -HTML::Template还支持在注释块中嵌入模板标签,以便您的代码与 HTML 兼容,如下所示:<!-- TMPL_NAME NAME=FNAME -->

再次来自 perldocs:

如果您对有效的 HTML 很狂热,并且希望您的模板符合有效的 HTML 语法,您可以选择以 HTML 注释的形式键入模板标签。这可能对希望在处理 HTML::Template 之前验证其模板的 HTML 语法或使用 DTD 精通编辑工具的 HTML 作者有用。

<!-- TMPL_VAR NAME=PARAM1 -->

This 2nd option didn't work originally for me until I set the die_on_bad_params => 0 for the constructor.

Option #3: Change the name of your Jekyll file from .md (markdown) to .html (vanilla html). This option get's around Jekyll's use of ReXML for it's XML parser. I'm not sure but if you switched from using ReXML to Nokogiri, I think that too would get around this issue, but I'm not entirely sure you can even reconfigure Jekyll in this manner.

Conclusion: Ultimately I think Option #2 is the best one to use, given it doesn't limit your ability to use .md files within Jekyll.

于 2012-07-08T16:14:07.200 回答