带有附加参数(如果可能)的通用视图或上下文处理器将额外信息传递给模板?

时间:2013-11-08 12:30:11

标签: python django django-views

我有一个通用ListView,它返回一个对象列表。

在我决定打印自创建时间(而不仅仅是创建对象)时为每个对象打印了多少时间之前,一切都很好。

然后我需要一段代码来计算它,我需要将结果传递给模板。 但现在我不能使用通用视图。

我考虑过context processors,但context processors仅将request作为参数,我还需要给它一个对象的id来计算时间增量。

那么,有没有办法让它使用通用视图或上下文处理器,或者我必须编写自定义视图?或者有更好的方法吗?


更新

感谢大家的详细解答,这对我将来会有很大的帮助。

我了解到可以使用timesince built-in template tag解决上述任务。希望它会帮助别人。

2 个答案:

答案 0 :(得分:2)

您可以覆盖get_context_data并向上下文词典添加更多数据:

class MyView(ListView):
    # ...

    def get_context_data(self, **kwargs):
        context = super(MyView, self).get_context_data(**kwargs)
        context['mydata'] = ...
        return context

然后,您可以在模板中使用mydata

您还可以访问context['object_list'],其中包含将在模板中显示的对象列表。

答案 1 :(得分:1)

如果您需要在特定ListView的上下文中添加更多内容,Simeon的答案显而易见,但如果您需要的东西不直接依赖于视图本身,您也可以使用自定义模板标签或过滤器。在您的情况下,从任何日期或日期时间计算增量的简单过滤器可能是票证。额外奖励:您可以在任何模板中的任何日期重复使用它,而无需更改视图中的任何内容......