使用 django 模板创建可读的 html

Posted

技术标签:

【中文标题】使用 django 模板创建可读的 html【英文标题】:Creating readable html with django templates 【发布时间】:2011-06-01 19:24:26 【问题描述】:

在使用 Django 进行 html 模板时,如何创建良好的 html 标记格式。

我正在尝试使用内容块。但是内容块在不同的模板中以不同的缩进级别显示。如何让内容块显示缩进,就像有人要手写 html 一样。

我在换行时遇到了同样的问题;我可以将模板中的所有块粉碎在一起。此时 html 看起来更好,但模板无法维护。

我想问题是如何使用 django 模板系统创建漂亮的 html 标记?

到目前为止,我对答案感到惊讶。我发现格式良好的 HTML 有助于编写相应的 CSS 和 javascript。以及使以后添加内容变得更加容易。

【问题讨论】:

为什么 HTML 布局很重要? 我宁愿反其道而行之,将 HTML 压缩得越紧越好,使其字符越少。 @rebus:同意 -- 较小的下载速度更快。似乎花时间在 HTML 上大惊小怪是浪费时间。首先,它在开发上浪费了时间。其次,浪费时间转移空白。第三,试图保留所有宝贵(且无意义)的空白是在维护上浪费时间。 当然,可读性好的 HTML 源代码对于任何普通用户来说都不值得,但对于普通开发人员来说,拥有任何可读格式的源代码似乎是完全合理的需求——尤其是因为这可以被采用自动照顾。 @S.Lott HTML 布局很重要,因为前端开发人员需要不时查看原始源代码(而不是在 Web 检查器中实际解析和查看的内容)以帮助诊断跨浏览器问题. 【参考方案1】:

来自 Pyevolve 的 Christian S. Perone 拥有exactly what you're looking for。他使用中间件拦截HTTPResponse对象并通过BeautifulSoup运行。

不过,我想您的网站会受到轻微的性能影响。我建议在将此中间件部署到生产站点之前运行一些基准测试。

【讨论】:

【参考方案2】:

您可以像我所做的那样覆盖 NodeList 的渲染方法。用工作代码查看我的问题:

Proper indentation in Django templates (without monkey-patching)?

【讨论】:

【参考方案3】:

您对生成的 html 的关心给我留下了深刻的印象 - 我只担心模板的整洁和可读性!但是在回答您的问题时,您是否看过中间件?

http://docs.djangoproject.com/en/dev/topics/http/middleware/

然后使用 Tidy python 模块重新格式化 html。

http://pypi.python.org/pypi/PythonTidy/

【讨论】:

【参考方案4】:

我建议通过 HTML 整理器运行模板引擎的输出,例如 µTidylib。

【讨论】:

【参考方案5】:

HTML 的可读性并不重要。在像 Django 或 Rails 这样的系统中,HTML 是一种输出格式,而不是源格式。当人们手动编辑 HTML 时,他们关心缩进和间距是对的,因为它是一种源格式,将来必须有人编辑它。但是模板的输出就是:输出。浏览器不关心缩进。在这一点上,唯一阅读 HTML 的人是查看 View - Source 的人。

【讨论】:

而唯一这样做的人可能是 OP 的项目经理,他现在愿意投资几千美元来取悦他的眼睛 ;-) +1 这假设您从不查看输出来尝试调试模板。【参考方案6】:

如果您使用 Django 模板对长而简单的字符串进行字符串格式化,您可以在函数 def 中使用 Python 的三引号字符串和 .format():

def templated_string(context_dict):
    return '''This is an example
of a long string across multiple lines.
It can be used to format something for 
name's own purposes, even though
it looks funny in code'''.format(**context_dict)

然后templated_string('name': 'rileymat', 'something': 'whatever you want') 做明智的事情。您可以通过这种方式生成原始 HTML……然后它就具有您要求的空白。

【讨论】:

以上是关于使用 django 模板创建可读的 html的主要内容,如果未能解决你的问题,请参考以下文章

以人类可读的形式在 QSettings 中保存自定义 QMap 模板实例化

在 django 中访问传递给模板的过滤器查询结果

一组可读的常数参数 C

django-model-utils StatusModel 可以提供人类可读的状态选项吗?

django人类可读性

Django Celery 结果将任务 ID 设置为人类可读的内容?