为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星点点滴滴 2021-09-25 18:25:32
我目前有一个名为“copyright”(动态版权消息)的函数,我试图将其包含到我的基本 Django 模板中,如下所示:def copyright():   some code   some more code   print(finaloutput)我把它放在我的 modules/utils.py 中,它位于我在静态目录中注册的资产目录中。我希望能够直接在我的主模板文件夹内的顶级 base.html 中调用该函数,例如 {{copyright}}。我已经尝试了一切以确保我在没有运气的情况下加载静态文件。我是否以错误的方式接近这个?
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

不幸的是,您在这里所做的几乎所有事情都是错误的。


这与静态文件无关:正如您自己所说,这是一个动态函数,因此根据定义不是静态的。无论如何,您不能将 Python 代码放在您的资产目录中。最后,任何像这样的函数总是需要返回结果,而不是打印它。


这里你需要的是一个模板标签,你把它放在你的应用程序的 templatetags 目录中并通过装饰器注册:


@register.simple_tag

def copyright():

   some code

   some more code

   return finaloutput

然后,在模板中加载标签并将其称为标签,而不是变量:


{% load utils %}  # or whatever you called the file

...

{% copyright %}

请参阅模板标签文档。


查看完整回答
反对 回复 2021-09-25
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

有几种方法可以实现您的最终目标,但是您所做的任何事情都不会使您达到目标。

你可以,

  1. 使用模板标签

  2. 以几种不同的方式使用上下文处理器

  3. 使用{{ 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"


查看完整回答
反对 回复 2021-09-25
  • 2 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信