如何将动态生成的内容块放入django模板?

时间:2009-06-21 16:06:06

标签: django django-templates

我希望在我的django模板中包含twitter状态或美味标签等内容。

这些东西是动态的,而且是规律的。怎么会这样做?

3 个答案:

答案 0 :(得分:4)

有很多方法可以解决这个问题,因此您可以选择最符合您个人风格或要求的方法:

  1. 模板上下文变量:正如Alex所回答的那样,您可以将内容放入上下文变量中,该变量包含在每个视图创建的每个模板的上下文中。 Django甚至提供了一种自动执行此操作的机制,称为context processor。优点:非常简单。缺点:不会动态刷新客户端浏览器上的新内容。

  2. AJAX动态加载:正如Alex和Dave所提到的,您可以使用AJAX方法动态加载内容。作为使用jQuery的示例,您可以在模板中放置一个类似<div id="twitterfeed"></div>的占位符,然后在模板的javascript块中放置$("#twitterfeed").load("{% url twitterfeed %}");,其中twitterfeed是一个在您的网址中命名的网址的.py。优点:将动态更新浏览器。缺点:如果您不了解Javascript,可能会很棘手。

  3. 包含标记:Django提供了一种名为inclusion tag的模板标记,它基本上是一个可以呈现动态内容的自定义模板标记。在某种程度上,它类似于上下文变量,除了生成内容的代码只有在模板中使用自定义模板标记而不是为每个视图调用时才会被调用。另一个好处是内容是从它自己的模板生成的。当然,您可以使用普通的上下文变量执行此操作,但它不像使用包含标记那样干净(IMHO)。优点:非常简单,干净。缺点:不会动态刷新客户端浏览器上的新内容。

答案 1 :(得分:1)

最简单的方法是在模板中使用{{ mycontent }}(您希望在其中显示动态生成的内容),并将mycontent及其值之间的对应关系放在用于呈现模板的上下文中 - 即,django模板中最基本的部分。

如果您的意思是您需要Ajax支持,那么页面上的Javascript会根据服务器在任何给定时间的需要不断刷新此类内容,我建议您查看dojango,Dojo / Django集成项目 - 它还没有完全成熟,因为每个Dojo和Django都是独立的(不是版本0.4),但它已经可用且有用。

答案 2 :(得分:1)

一种常见的技术是在生成的内容中留下占位符div,然后通过您在页面中包含的Javascript调用AJAX来填充客户端的div。

这为您提供了具有可缓存(快速加载)主页面的好处,具有单独的动态位。根据您想要动态位的实时情况,您甚至可以将它们缓存为更短的持续时间。