在 Django HTML 模板中包含一个简单的函数

我目前有一个名为“copyright”(动态版权消息)的函数,我试图将其包含到我的基本 Django 模板中,如下所示:


def copyright():

   some code

   some more code

   print(finaloutput)

我把它放在我的 modules/utils.py 中,它位于我在静态目录中注册的资产目录中。


我希望能够直接在我的主模板文件夹内的顶级 base.html 中调用该函数,例如 {{copyright}}。


我已经尝试了一切以确保我在没有运气的情况下加载静态文件。我是否以错误的方式接近这个?


繁星点点滴滴
浏览 208回答 2
2回答

UYOU

不幸的是,您在这里所做的几乎所有事情都是错误的。这与静态文件无关:正如您自己所说,这是一个动态函数,因此根据定义不是静态的。无论如何,您不能将 Python 代码放在您的资产目录中。最后,任何像这样的函数总是需要返回结果,而不是打印它。这里你需要的是一个模板标签,你把它放在你的应用程序的 templatetags 目录中并通过装饰器注册:@register.simple_tagdef copyright():   some code   some more code   return finaloutput然后,在模板中加载标签并将其称为标签,而不是变量:{% load utils %}  # or whatever you called the file...{% copyright %}请参阅模板标签文档。

慕勒3428872

有几种方法可以实现您的最终目标,但是您所做的任何事情都不会使您达到目标。你可以,使用模板标签。以几种不同的方式使用上下文处理器。使用{{ view.function_name }}AS-是在你的模板,如果你使用的是来自Django的基于类的通用视图。从我认为您设置的方式来看,最快的方法可能是在您的视图中传递一些上下文数据。如果您使用功能视图,您的代码可能如下所示: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"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python