Вызов функции из другого файла для использования в шаблонах - PullRequest
0 голосов
/ 31 января 2019

У меня есть функция для создания процента в этом файле

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

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Если вы используете представление на основе классов , вы можете просто добавить свой статусный объект в контекст.Для этого переопределите метод 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
0 голосов
/ 31 января 2019

Да .Вам нужно только передать объект Status в шаблонизатор (так что для render(..) это переменная контекста).

Например, для представления вы можете записать это как:

from some_module.status import <b>Status</b>

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

Так что теперь контекст шаблона содержит переменную status, которая является просто Status объектом, и вы можете использовать его как другие переменные.Если вы напишите {{ status.percentage }}, он вызовет метод precentage.

В представлении на основе классов вы, таким образом, "исправите" метод get_context_data, например @ Andy говорит:

from some_module.status import <b>Status</b>

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
        <b>context['status'] = Status()</b>
        return context
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...