我目前有一个名为“ copyright”(动态版权信息)的函数,正尝试将其包含在基本Django模板中,如下所示:
def copyright():
some code
some more code
print(finaloutput)
我将其放在我的资产目录中的我的模块/utils.py中,该目录已在我的静态目录中注册。
我希望能够直接在主模板文件夹的顶级base.html中调用类似{{copyright}}之类的函数。
我已尽一切努力来确保我顺利地加载了静态文件。我是用错误的方式来处理这个问题吗?
答案 0 :(得分:1)
不幸的是,您在这里所做的几乎所有事情都是错误的。
这与静态文件无关:正如您自己说的那样,这是一个动态函数,因此从定义上来说不是静态的。无论如何,您不能将Python代码放在资产目录中。最后,像这样的任何函数将总是需要返回结果,而不是打印结果。
这里需要的是模板标记,您可以将其放入应用程序的templatetags目录中,并通过装饰器进行注册:
@register.simple_tag
def copyright():
some code
some more code
return finaloutput
然后,将标签加载到模板中,并将其称为标签,而不是变量:
{% load utils %} # or whatever you called the file
...
{% copyright %}
答案 1 :(得分:0)
有几种方法可以实现您的最终目标,但是您所做的任何事情都无法达到目标。
可以,
{{ view.function_name }}
。 从我认为您的设置方式来看,最快的方法可能是仅在视图中传递一些上下文数据。
如果您使用的是功能视图,则您的代码可能看起来像这样:
def my_view(request):
def copyright():
return "copyright 2018"
return render('my_template.html', {'copyright': copyright})
如果您使用的是基于类的通用视图,则只需修改get_context_data
。
class Home(TemplateView):
def get_context_data(self, *args, **kwargs):
ctx = super(TemplateView, self).get_context_data(self, *args, **kwargs)
ctx['copyright'] = self.copyright()
return ctx
def copyright(self):
return "copyright 2018"