使用 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 模板实例化