1

これがenlive 1.1.5(明確にするために追加されたソースの書式設定/空白の変更です)。

blogen.core> (html/sniptest "<html><head>
                                <title><span id=\"foo\"/></title>
                              </head></html>"
                            [:#foo] (html/substitute "f"))
"<html><head><title></title></head></html>f"

blogen.core> (html/sniptest "<html><head>
                                <title><span id=\"foo\"/></title>
                              </head></html>"
                            [:#foo] (constantly "f"))
"<html><head><title></title></head></html>f"

最終コンテンツで clojure コードが飽和しないように、HTML ソースに定数プレフィックスを記述したいと考えています。spanしかし、上記のスニップテストが示すように、内にタグを含めることはできませんtitle。コア関数を使用した 2 番目のテストconstantlyは、これ以上カスタム作成された変換が成功する可能性が低いことを示しています。

${vars}テンプレートではばかげているように見えるので、使用したくありません。私はテンプレートにまともな例を書くことを好みます。

動機

基本的に、テンプレートを HTML として記述し、変数プレースホルダーとしてspan定義済みの要素を使用することを楽しんでいます。しかし、 enlive は's内のタグを必要に応じidて解析しません。物事をあまり完成させないようにする。例:spantitle

<title><span id="article-name"/> - <span id="my-site" /></title>

また

<p>Welcome, <span id="visitor-ip" /></p>
4

1 に答える 1

1

HTML5 仕様によると、<title>タグの ContentModel は Text です。これは、HTML 要素がその中に許可されていないことを意味します。

HTML を解析する Enlive の部分は、おそらく有効な HTML しか処理できないため、<span>タグ内の<title>タグとうまく連携しません。

いくつかのオプションがあります。

<title>次のように、タグを完全に置き換えるのではなく、タグのコンテンツを設定することもできます。

(html/sniptest "<html><head><title>Placeholder</title></head></html>"
               [:title] (html/content "foo"))

;; => <title>foo</title>

または、タイトルの一部を一定に保ちたい場合は、appendまたはを使用できますprepend

(html/sniptest "<html><head><title>Some Title</title></head></html>"
                [:title] (html/append " - sub page"))

;; => <title>Some Title - sub page</title>

編集

あなたが避けたいと言ったのは知っています${vars}が、この場合、彼らはたまたまあなたが探していることを正確に行います...

(html/sniptest "<html><head><title>${my-site} - ${article-name}</title></head></html>"
               [:title] (html/transform-content
                          (html/replace-vars
                             {:article-name "Using Enlive for good and evil"
                              :my-site "Clojure Weekly"})))

;; =>  <title>Clojure Weekly - Using Enlive for good and evil</title>
于 2014-01-21T12:43:20.573 に答える