用模板构建HTML而不是用javascript构建它?

时间:2010-11-21 20:00:57

标签: ajax django-templates web.py jquery-templates

我最近开始制作网络应用程序,虽然我制作了一些有用的东西,但我不确定最佳做法。

到目前为止,我主要使用Django,web.py和PHP的模板系统。但是现在我正在使用jQuery和不错的ajaxy魔法来从服务器获取数据而不刷新客户端,我看到了直接在javascript中构建HTML的优势(所以我可以将一个小的json对象发送到客户端并且让他弄清楚要改变什么以及如何改变。

所以现在我有一些使用模板渲染的位,有些是用javascript构建的,甚至是一个可怕的情况,其中有两者混合,一个web.py模板生成一个创建HTML表的javascript函数 - 再次感觉就像C宏一样! (我最终会重构那个)

这是网络开发中的常见问题吗?任何推荐的最佳实践,例如“在所有内容中使用json,在javascript中尽可能多地渲染”,“使用库foo”等等?什么处理模板以及使用javascript处理什么的好的启发式方法?

在这里搜索一下,我找到了一个人asking about javascript templates,这似乎是一个可能的解决方案。

5 个答案:

答案 0 :(得分:4)

请不要使用Javascript来布局页面。只在需要的地方使用它。

尽管最近进行了增强和标准化,但Javascript通常仍然很慢,难以完全兼容(想想旧的IE和其他),并且与某些屏幕阅读器和搜索引擎/搜索引擎不兼容。

如果您可以通过直接返回HTML来实现,那么这通常就是您想要的方式。

答案 1 :(得分:2)

这里有一个略微相关的question

你可以使用相同的模板 - this library看起来很有用。

您只能在服务器上呈现模板... the question在顶部有一种方法可以有效地完成。

如有必要,您可以在javascript中复制某些模板 - 尝试jqtemplate

就个人而言,我可能只在服务器端呈现HTML,以避免模板重复。如果我的服务器充当JSON Web服务,可能还为其他客户服务,我会做JS模板。

也就是说,如果您的网站可访问且非友好对您很重要(应该是),那么请在没有js的情况下完全编写您的网站,然后progressively enhance

答案 2 :(得分:1)

永远不要将您网站的功能基于javascript。如果你这样做,你将失去所有javascript关闭的访问者。如果你真的想要,你需要检测用户关闭javascript并重定向它们;或提供<noscript>替代方案。此外,虽然爬虫现在可以解析javascript,但它仍然是对网站的SEO的巨大破坏。还有兼容性和开销问题,这可能是今天的移动设备,上网本等问题。

答案 3 :(得分:1)

一段时间后我遇到了同样的麻烦。我有一个使用web.py模板呈现内容的网页,它有一个ajax分页。所以它必须使用javascript渲染下一页。我最终扩展了web.py模板引擎以生成一个javascript函数来呈现相同的模板输出。

有关详细信息,请参阅此博客文章:

http://anandology.com/blog/javascript-templating-with-webpy/

答案 4 :(得分:1)

AngularJS是客户端模板的流行解决方案,我在问这个问题多年后就发现了这个问题。您可以像在Django中一样编写HTML模板(&#34; partials&#34;),然后根据需要进行javascript获取和解释 - 这样您就可以获得两全其美的动态网站,并且可以清晰地分离代码和布局。