Джанго - как получить значение в ListView из HTML? - PullRequest
0 голосов
/ 16 мая 2019

Используя Django, я создал класс Book и класс BookManager в models.py.Класс BookManager имеет метод для подсчета количества названий книг, содержащих ключевое слово.Как я могу показать количество названий книг в HTML-файле, используя представление на основе Classe?

Я знаю, как это сделать, используя представление на основе функций, но не с представлением на основе классов ListView.

models.py
from django.db import models

# Create your models here.
class BookManager(models.Manager):
    def title_count(self, keyword):
        return self.filter(title__icontains=keyword).count()


class Book(models.Model):
    title = models.CharField(max_length=100)
    publication_date = models.DateField()
    page_length = models.IntegerField(null=True, blank=True)

    objects = BookManager()

    def __unicode__(self):
        return self.title

views.py

from django.shortcuts import render
from django.views.generic import ListView

from .models import Book

class BookViewPage(ListView):
    model = Book
    title_number = Book.objects.title_count('django')

def bookviewpage(request):
    context ={
        'count': Book.objects.title_count('django')
    }
    return render(request, 'books/book_list.html', context)

Я хочу отобразить счетчик названий книг в файле HTML с использованием представления на основе Classe.

1 Ответ

1 голос
/ 16 мая 2019

Вы можете добавить элементы в контекст представлений на основе классов, переопределив метод get_context_data.

class BookViewPage(ListView):
    model = Book

    def get_context_data(self, **kwargs):
        context = super(BookViewPage, self).get_context_data(**kwargs)
        context['title_number'] = Book.objects.title_count('django')
        return context

Теперь вы можете использовать {{ title_number }} в шаблоне.

Putting title_number = Book.objects.title_count('django') в представлении не работает, потому что этот код выполняется, когда модуль загружен, а не когда представление обрабатывает запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...