我的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 }}
我在屏幕上什么都没得到。这是一种合理的方法吗?有没有更好的方法将函数的结果包含在模板中?
答案 0 :(得分:2)
你应该在视图的最后有这样的东西:
return render(response, self.template_name, context)
确保在上下文中包含函数的结果:
context={
'fetch_result': foo.fetch_result(),
}
最后在你的模板中称之为:
{{ fetch_result }}
模板只知道您的背景
答案 1 :(得分:0)
首先,似乎没有充分的理由让代码出现在类中。 Python不是Java;把功能放在模块级别。除了其他任何东西,你不能通过类本身调用实例方法;你必须有一个Defin的实例。
其次,如果您将名称utils
传递到模板上下文中,则只能从模板中调用此内容;你没有表现出你的观点,但你似乎不太可能这样做。
最后,您应该问为什么要从模板中调用它。更好的方法是在视图中调用它,并将结果传递给模板。