从另一个文件调用函数以在模板中使用

2024-04-27 00:46:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数在这个文件中创建一个百分比

status.py

class Status:
    read_books = Books.objects.filter(read="True")
    all_books = Books.objects.all()

    def percentage(self):
        asdf = get_percentage(len(self.read_books),len(self.all_books))
        return asdf

我试图能够在我的模板中使用这个函数,通过在我的模板中使用类似的东西来显示这个百分比

{{ status.percentage }}

这可能吗?为了做到这一点,我是否需要在我的观点中加入逻辑?你知道吗

也许我可以把这个函数放到我的视图类中,然后从那里调用它?你知道吗

编辑:

views.py

class BooksView(TemplateView):
    template_name = 'KPI/Books.html'
    read_books = Books.objects.filter(read="True")
    all_books = Books.objects.all()


    def get_context_data(self, **kwargs):
        context = super(BooksView, self).get_context_data(**kwargs)
        context['all_books'] = self.all_books
        context['read_books'] = self.read_books    
        return context

Tags: 函数pyselfreadgetobjectsstatuscontext
2条回答

如果使用class based view,只需在上下文中添加status对象即可。为此,请重写get_context_data方法:

class myView(View):
    #...
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        myStatus = Status()
        context['status'] = myStatus
        return context

。只需将Status对象传递给模板引擎(因此对于render(..)来说,这是一个上下文变量)。你知道吗

例如,对于视图,可以将其编写为:

from some_module.status import Status

def some_view(request):
    # ...
    status = Status()
    return render(request, 'some_template.html', { 'status': status })

所以现在模板上下文包含一个变量status,它只是一个Status对象,您可以像使用其他变量一样使用它。如果您编写{{ status.percentage }},它将调用precentage方法。你知道吗

因此,在基于类的视图中,可以“修补”方法get_context_data,如@Andy所示:

from some_module.status import Status

class BooksView(TemplateView):
    template_name = 'KPI/Books.html'
    read_books = Books.objects.filter(read="True")
    all_books = Books.objects.all()

    def get_context_data(self, **kwargs):
        context = super(BooksView, self).get_context_data(**kwargs)
        context['all_books'] = self.all_books
        context['read_books'] = self.read_books
        context['status'] = Status()
        return context

相关问题 更多 >