В настоящее время я столкнулся с этой проблемой с Django ListView. По сути, мне нужно отфильтровать некоторые вопросы по каждой теме, и я хотел бы разбить результаты на страницы.
Мой код отлично работает в части набора запросов (результаты отображаются правильно), но я столкнулся с проблемой разбиения на страницы.
/>Предположим, у меня в запросе 8 элементов. Если я выберу paginate_by = 10, мне будет показана только одна страница. Если в противном случае я выберу нумерацию страниц, скажем, на 3, мне будет показано 3 страницы для выбора в шаблоне (что правильно), но при этом будут показаны ВСЕ результаты запроса на моей странице.
Я публикую немного кода для большей ясности
models.py:
class Tag(models.Model):
name = models.CharField(max_length=300, unique=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def clean(self):
self.name = self.name.capitalize()
def __str__(self):
return self.name
class Question(models.Model):
post_owner = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=5000, default='')
body = tinymce_models.HTMLField()
tags = models.ManyToManyField(
Tag, related_name='tags')
viewers = models.ManyToManyField(
User, related_name='viewed_posts', blank=True)
views.py:
class TagQuestionsListView(ListView):
template_name = 'main/tag_questions.html'
paginate_by = 20
def get_queryset(self, **kwargs):
tag = Tag.objects.get(name=self.kwargs['name'])
questions = Question.objects.filter(tags=tag)
return questions
def get_contextdata(self, **kwargs):
context = super().get_context_data(**kwargs)
context['tag'] = Tag.objects.get(name=self.kwargs['name'])
context['questions'] = Question.objects.filter(
tags=context['tag'], is_deleted=False)
return context
шаблон:
{% extends 'base.html' %}
{% load humanize %}
{% block title %}Domande su {{tag.name}}{% endblock title %}
{% block content %}
.text {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2; /* number of lines to show */
line-clamp: 2;
-webkit-box-orient: vertical;
}
Ultime {{ questions.count }} Domande
{% if request.user.is_authenticated %}
Fai una domanda
{% else %}
Fai una domanda
{% endif %}
{{ total_questions.count }} domande totali
{% for question in questions %}
{{ question.count_all_the_votes }} Voti
{{ question.count_answers }} Risposte
{{ question.calculate_viewers }} Visualizzazioni
{{question.title}}
{{ question.body|striptags }}
{% for tag in question.tags.all %}
{{tag.name}}
{% endfor %}
Precedente
{% else %}
[*]Precedente
{% endif %}
{% for i in paginator.page_range %}
[*]{{i}}
{% endfor %}
{% if page_obj.has_next %}
[*]Prossima
{% else %}
[*]Prossima
{% endif %}
[/list]
{% endblock content %}
Подробнее здесь: https://stackoverflow.com/questions/731 ... ntext-data
Пагинация в Django ListView при использовании get_context_data ⇐ Python
Программы на Python
-
Anonymous
1736798988
Anonymous
В настоящее время я столкнулся с этой проблемой с Django ListView. По сути, мне нужно отфильтровать некоторые вопросы по каждой теме, и я хотел бы разбить результаты на страницы.
Мой код отлично работает в части набора запросов (результаты отображаются правильно), но я столкнулся с проблемой разбиения на страницы.
/>Предположим, у меня в запросе 8 элементов. Если я выберу paginate_by = 10, мне будет показана только одна страница. Если в противном случае я выберу нумерацию страниц, скажем, на 3, мне будет показано 3 страницы для выбора в шаблоне (что правильно), но при этом будут показаны ВСЕ результаты запроса на моей странице.
Я публикую немного кода для большей ясности
models.py:
class Tag(models.Model):
name = models.CharField(max_length=300, unique=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def clean(self):
self.name = self.name.capitalize()
def __str__(self):
return self.name
class Question(models.Model):
post_owner = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=5000, default='')
body = tinymce_models.HTMLField()
tags = models.ManyToManyField(
Tag, related_name='tags')
viewers = models.ManyToManyField(
User, related_name='viewed_posts', blank=True)
views.py:
class TagQuestionsListView(ListView):
template_name = 'main/tag_questions.html'
paginate_by = 20
def get_queryset(self, **kwargs):
tag = Tag.objects.get(name=self.kwargs['name'])
questions = Question.objects.filter(tags=tag)
return questions
def get_contextdata(self, **kwargs):
context = super().get_context_data(**kwargs)
context['tag'] = Tag.objects.get(name=self.kwargs['name'])
context['questions'] = Question.objects.filter(
tags=context['tag'], is_deleted=False)
return context
шаблон:
{% extends 'base.html' %}
{% load humanize %}
{% block title %}Domande su {{tag.name}}{% endblock title %}
{% block content %}
.text {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2; /* number of lines to show */
line-clamp: 2;
-webkit-box-orient: vertical;
}
Ultime {{ questions.count }} Domande
{% if request.user.is_authenticated %}
[url={% url ]Fai una domanda[/url]
{% else %}
[url={% url ]Fai una domanda[/url]
{% endif %}
{{ total_questions.count }} domande totali
{% for question in questions %}
{{ question.count_all_the_votes }} Voti
{{ question.count_answers }} Risposte
{{ question.calculate_viewers }} Visualizzazioni
[url={% url ]{{question.title}}[/url]
{{ question.body|striptags }}
{% for tag in question.tags.all %}
[url={% url ]{{tag.name}}[/url]
{% endfor %}
[url={% url ]Precedente[/url]
{% else %}
[*][url=#]Precedente[/url]
{% endif %}
{% for i in paginator.page_range %}
[*][url=?filter={{ filter }}&orderby={{ orderby }}&page={{ i }}]{{i}}[/url]
{% endfor %}
{% if page_obj.has_next %}
[*][url={% url ]Prossima[/url]
{% else %}
[*][url=#]Prossima[/url]
{% endif %}
[/list]
{% endblock content %}
Подробнее здесь: [url]https://stackoverflow.com/questions/73149926/pagination-in-django-listview-when-using-get-context-data[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия