动态地包含Django中其他应用程序的模板元素

时间:2009-08-05 22:25:06

标签: django templates dynamic

App_1包含此视图的视图和模板。它希望从其他来源(即其他应用程序)将信息“聚合”到此视图中,而无需自己添加或更改任何内容。也许App_2希望在App_1的视图中将“hello world”放入此指定区域。实现这一目标的最佳方式是什么?

信号自然浮现在脑海中。但信号接收器应该发回什么?在我看来,App_1模板包含一个自定义标记,可以发送信号并接收一个模板列表(例如“app_2 / template.html”),然后它会注册每个模板。但是,似乎inclus_tag仅支持每个标记的1个模板呈现。

我有什么追索权?

2 个答案:

答案 0 :(得分:2)

我最终做了我所描述的内容,但没有默认的inclusion_tag支持。我制作了一个自定义标签,用于发送信号,收集模板名称,并创建一个节点,将每个模板串联呈现并连接结果。这似乎工作正常,并且与包含标签shebang具有相同的逻辑。

答案 1 :(得分:0)

我希望我理解正确,但看起来你的第二句话就是解决这个问题:'聚合'。 App_1中的视图功能应聚合或收集所有必要的数据,然后通过上下文变量将其传递给模板。

我认为需要解决的问题是:视图功能如何知道要聚合哪些数据?

通常,视图函数会提前编码,并知道需要使用哪些数据。例如,日历应用程序可能是硬编码的,用于获取事件模型对象并将其传递给模板(通过上下文)。但是,在您的情况下,似乎进入App_1的数据完全是任意的,而且以前没有定义过。

你提到了信号,但我认为你在这里遇到的问题是信号只会发出事件发生的通知。它们不允许reeving函数传回数据,发出信号的代码也不会等待所有信号接收器在继续之前完成处理。

或许你可以建立一个注册系统。 App_ 1维护某事的列表。其他应用程序“注册”该列表中的项目,当App_1中的视图函数触发时,它会将列表转换为可用数据,然后通过上下文变量将其传递给模板。