質問
Django には、一般的な HTML マークアップを生成するためのテンプレート タグはありますか?たとえば、次を使用して URL を取得できることはわかっています。
{% url mapper.views.foo %}
ただし、これでは URL が提供されるだけで、リンクを作成するための HTML コードは提供されません。Django には Rails の link_to ヘルパーに似たものはありますか?見つけました ジャンゴヘルパー しかし、これはよくあることなので、Django には何かが組み込まれているだろうと思いました。
解決
いいえ、そうではありません。
ジェームズ・ベネット と答えた 同様の質問 少し前に、Rails の組み込み JavaScript ヘルパーについて話しました。
その 本当に Django に「ヘルパー」機能が組み込まれる可能性は低いです。私の理解が正しければ、その理由は、物事を維持するという Django の核となる哲学に関係しています。 疎結合. 。この種のヘルパー機能が組み込まれていると、Django を特定の JavaScript ライブラリまたは (あなたの場合は) HTML ドキュメント タイプと結合することになります。
例えば。HTML 5 が最終的に実装され、Django が HTML 4 または XHTML マークアップを生成したらどうなりますか?
そうは言っても、Django のテンプレート フレームワークは非常に柔軟なので、それほど難しいことではありません。 独自のタグ/フィルターを作成する それはあなたが望んでいたものでした。私自身もほとんどデザイナーですが、魔法のように機能するカスタム タグをいくつかまとめることができました。
他のヒント
ヘルパーの目的は、ここで他の人が示唆しているように、HTML の書き方を知らない開発者を助けることではありません。その目的は、共通の機能をカプセル化することであり、同じことを何千回も記述する必要がなく、アプリ全体で使用される共通の HTML を編集する単一の場所を提供することです。
テンプレートと SSI が便利な理由は同じです。ヘッダーとフッターに HTML を記述する方法がわからないからではなく、一度だけ書きたい場合もあります。
例えば。HTML 5 が ついに実装され、Django は HTML 4 または XHTML マークアップを生成しますか?
HTML 5 が実装され、すべてのテンプレートが反復的な HTML で記述されている場合と同じことが起こりますが、はるかに簡単になります。
他の投稿はすでに質問に答えており、ドキュメントへのリンクがあります。 カスタムテンプレートタグ;タグやフィルターを使用して独自のタグやフィルターを作成することもできますが、組み込みのものはありません。
それらは組み込まれているようには見えませんが、ここにいくつかのスニペットを示します。これらのヘルパーを作成するのは非常に簡単に見えます。
がここにあります Django に組み込まれているすべてのテンプレート タグとフィルターのリスト. 。Django の寄稿者は Web 開発者が HTML をよく知っていると想定しているため、Django コアには Rails ほど多くの HTML ヘルパーがありません。saturdaypalace が述べているように、Django と特定の JavaScript ライブラリを結合することになるため、AJAX ヘルパーが Django に追加される可能性は非常に低いです。
とても簡単です 独自のテンプレートタグを書く Django では (Rails と同様に、多くの場合、関数を 1 つ定義するだけで済みます)。Rails ヘルパーのほとんどは 1 ~ 2 日あれば Django に再実装できます。
現状についての同意があるかどうかはわかりませんが、 一般的なHTML, 、完全を期すために(または他の人がそれを持っているため)、ヘルパーモジュールも存在します。;)
それ以外では、Django テンプレート システムは主に HTML の作成方法をすでに知っている HTML 担当者向けに作られています。 p
, img
そして a
タグは必要ありません ヘルパー そのために。一方で、Python 開発者もいます。彼らはコードを記述し、コンテキスト内に置く変数が次のもので囲まれているかどうかを気にしません。 div
またはによって span
(完璧な例 関心事の分離 パラダイム)。これら 2 つの世界を結合する必要がある場合は、自分で行う必要があります (または他の人のコードを探す必要があります)。
これは質問に対する直接の答えにはなりませんが、なぜ使用しないのですか <a href="{% url mapper.views.foo %}">foo</a>
ではテンプレで?