我具有在此文件中创建百分比的功能
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
答案 0 :(得分:2)
是。您只需要将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
答案 1 :(得分:2)
如果使用class based view,则只需在上下文中添加状态对象。为此,请覆盖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