如何在Django模板中包含函数调用?

时间:2014-10-22 21:40:55

标签: django python-2.7

我的Django应用程序(1.7)中有一个函数,我希望在模板中包含此函数的结果。我的函数位于utils.py文件中,该文件与models.py,views.py和urls.py位于同一文件夹中。

utils.py中我的函数代码是:

class Defin():
    global infotree_graph
    graph = neo4j.GraphDatabaseService("http://<your_url>:7474/db/data/")

    def fetch_overview(self):
        overview_query = "<query>"  
        results = neo4j.CypherQuery(graph, bacm_overview_query).execute()        

        for r in results:        
            definition = r['definition']

        return definition

当我在python中自己运行这个函数时,我得到了正确的字符串。

以下是我的观点:

from django.shortcuts import render
from django.http import HttpResponse
from django.template import RequestContext, loader
from myapp import utils

def introduction(request):
    return render(request, 'myapp/introduction.html')

def bacm(request):
    return render(request, 'myapp/definition.html')

在我的模板中,我包括:

{{ utils.Defin.fetch_overview }}

我在屏幕上什么都没得到。这是一种合理的方法吗?有没有更好的方法将函数的结果包含在模板中?

2 个答案:

答案 0 :(得分:2)

你应该在视图的最后有这样的东西:

return render(response, self.template_name, context)

确保在上下文中包含函数的结果:

context={
    'fetch_result': foo.fetch_result(),
}

最后在你的模板中称之为:

{{ fetch_result }}

模板只知道您的背景

答案 1 :(得分:0)

首先,似乎没有充分的理由让代码出现在类中。 Python不是Java;把功能放在模块级别。除了其他任何东西,你不能通过类本身调用实例方法;你必须有一个Defin的实例。

其次,如果您将名称utils传递到模板上下文中,则只能从模板中调用此内容;你没有表现出你的观点,但你似乎不太可能这样做。

最后,您应该问为什么要从模板中调用它。更好的方法是在视图中调用它,并将结果传递给模板。