Django 有 HTML 助手吗?
Posted
技术标签:
【中文标题】Django 有 HTML 助手吗?【英文标题】:Does Django have HTML helpers? 【发布时间】:2010-09-08 20:30:08 【问题描述】:Django 是否有任何模板标签来生成常见的 html 标记?例如,我知道我可以使用
% url mapper.views.foo %
但这只会给我 URL 而不是用于创建链接的 HTML 代码。 Django 有什么类似于 Rails 的 link_to 助手的吗?我找到了django-helpers,但由于这是一个常见的东西,我认为 Django 会内置一些东西。
【问题讨论】:
【参考方案1】:不,它没有。
James Bennett 不久前回答了 similar question,关于 Rails 的内置 javascript 帮助程序。
真的 Django 不太可能内置“助手”功能。如果我理解正确的话,原因与 Django 的核心理念有关,即保持事物loosely coupled。内置这种帮助器功能会导致将 Django 与特定的 JavaScript 库或(在您的情况下)html 文档类型耦合。
EG。如果/当 HTML 5 最终实现并且 Django 生成 HTML 4 或 XHTML 标记时会发生什么?
话虽如此,Django 的模板框架确实很灵活,write your own tags/filters 做到你想要的并不难。我自己主要是一名设计师,我已经能够将几个自定义标签放在一起,就像一个魅力。
【讨论】:
这看起来像是对 Rails 助手的用途的误解,它们根本与 JavaScript 或 Ajax 没有任何关系。 rails 指南guides.rubyonrails.org/getting_started.html 将它们描述为提供“用于视图的可重用代码的小型 sn-ps”。我发现的一篇博文 railspikes.com/2008/8/22/how-to-fix-your-rails-helpers 将它们称为标记生成器。 我已经使用 django 4 年了,使用 rails 1 年。Rails 助手只是捷径,我在使用 Django 时从来没有感觉到他们需要。【参考方案2】:帮助者的目的并不是像这里的其他人暗示的那样帮助不知道如何编写 HTML 的开发人员。其目的是封装通用功能——因此您不需要写一千次相同的东西——并提供一个地方来编辑整个应用程序中使用的通用 HTML。
这与模板和 SSI 有用的原因相同 - 不是因为人们不知道如何在页眉和页脚中编写 HTML,而是有时您只想编写一次。
EG。如果/当 HTML 5 是 终于实现了,Django 是 生成 HTML 4 或 XHTML 标记?
在实现 HTML 5 并且所有模板都用重复的 HTML 编写时会发生同样的事情,但要容易得多。
其他帖子已经回答了这个问题,链接到custom template tags上的文档;你可以使用标签和过滤器来构建你自己的,但不,没有任何内置的。
【讨论】:
【参考方案3】:它们看起来不像是内置的,但这里有几个 sn-ps。看起来创建这些助手很容易:
http://www.djangosnippets.org/snippets/441/
【讨论】:
【参考方案4】:这是list of all template tags and filters built into Django。 Django 核心没有 Rails 那么多的 HTML 帮助程序,因为 Django 贡献者假设 Web 开发人员非常了解 HTML。正如 saturdaypalace 所说,将 AJAX 助手添加到 Django 的可能性很小,因为这会导致 Django 与特定的 JavaScript 库耦合。
在 Django 中write your own template tags 非常容易(通常您只需要定义一个函数,类似于 Rails)。您可以在一两天内重新实现 Django 中的大多数 Rails 助手。
【讨论】:
【参考方案5】:我敢打赌,如果有人同意common html,也会有帮助模块,只是为了完整性(或者因为其他人有它)。 ;)
除此之外,Django 模板系统主要是为那些已经知道如何编写 p
、img
和 a
标签并且不需要任何 helpers 的 HTML 人制作的.另一方面是 Python 开发人员,他们编写代码并不关心他们放在上下文中的变量是否被 div
或 span
包围(关注点分离范式的完美示例) .如果你需要将这两个世界连接起来,你必须自己做(或寻找别人的代码)。
【讨论】:
【参考方案6】:这不会直接回答问题,但是为什么不在模板中使用<a href="% url mapper.views.foo %">foo</a>
呢?
【讨论】:
cos Ruby/Rails 开发者比 Pythonistas 更懒 并有味觉以上是关于Django 有 HTML 助手吗?的主要内容,如果未能解决你的问题,请参考以下文章