Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.08.2020
Сообщений: 43

Один класс на два шаблона

24.10.2022, 18:18. Показов 458. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня, уважаемые форумчане! Столкнулась с такой проблемой.

Имеется два класса-представления: один для списка всех статей, второй для вывода одной статьи:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Articles(ListView):
    model = Article
    template_name = 'articles/articles.html'
    context_object_name = 'articles'
    paginate_by = 10
    articles = Article.objects.filter(is_published=True)
 
    def get_queryset(self):
        return self.articles
 
 
class ShowArticle(DetailView):
    model = Article
    template_name = 'articles/conrete_article.html'
    slug_url_kwarg = 'article_slug'
    context_object_name = 'article'
Теперь задача седлать класс для главной страницы. Задача: отображать статью с is_main_page=True, если таких нет, то вывести список всех статей. Написала вот такой класс:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Main(ListView):  
    articles = Article.objects.filter(is_published=True)
 
    def get_queryset(self):
        main_page = self.articles.filter(is_main_page=True)
        if main_page.exists():
            self.template_name = 'articles/conrete_article.html'
            self.context_object_name = 'article'
            return self.articles.filter(is_main_page=True).first()
        else:
            self.model = Article
            self.template_name = 'articles/articles.html'
            self.context_object_name = 'articles'
            self.paginate_by = 10
            return self.articles
Но получается повтор кода. Хорошая идея была наследовать class Main от class Articles. Но в случае отображения одной страницы (if main_page.exists()), ругается на self.paginate_by = 10, который определен в родительском классе Articles:

object of type 'Article' has no len() django

Как лучше поступить? Может я вообще не в том направлении думаю? Помогите, пожалуйста
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2022, 18:18
Ответы с готовыми решениями:

Joomla 3 два одинаковых шаблона, один медленно грузится, а второй быстро
Добрый день, помогите пожалуйста советом не знаю что делать два одинаковых шаблона, одинхостинг http://moscowbrand.ru типография ...

Два include и один класс (E2015)
Добрый день! Может ли кто подсказать, как бороться если в двух инклудах объявлен одинаковый класс «z_stream»? То есть создаю новый...

Как добавить два класса? Чтоб один класс наследовал другой
Есть игра крестики нолики. Нужно добавить два класса. Первый класс доска, второй класс клетка. И чтобы класс доска был наследником класса...

2
96 / 64 / 34
Регистрация: 08.02.2021
Сообщений: 213
24.10.2022, 23:06
Возможно, вам помогут миксины. Почитайте про них. Сделаете миксин с общим функционалом и будете наследовать от него классы Articles и Main, расширяя, при необходимости, функционал
1
0 / 0 / 0
Регистрация: 15.08.2020
Сообщений: 43
31.10.2022, 09:05  [ТС]
получилось вот так:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class ArticleMixin():
    model = Article
    template_name = 'articles/articles.html'
    context_object_name = 'articles' 
    articles = Article.objects.filter(is_published=True)
 
    def get_queryset(self):
        return self.articles
 
 
class Articles(ArticleMixin, ListView):
    paginate_by = 10
 
 
class ShowArticle(DetailView):
    model = Article
    template_name = 'articles/conrete_article.html'
    slug_url_kwarg = 'article_slug'
    context_object_name = 'article'
 
 
class Main(ArticleMixin, ListView):
    def __init__(self):
        self.main_page = self.articles.filter(is_main_page=True)
 
    def get_queryset(self):
        if self.main_page.exists():
            self.template_name = 'articles/conrete_article.html'
            self.context_object_name = 'article'
            return self.articles.filter(is_main_page=True).first()
        else:
            self.paginate_by = 10
            return self.articles
работает исправно. Это не говнокод?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.10.2022, 09:05
Помогаю со студенческими работами здесь

Создать собственный класс, включающий поля и методы, в том числе два конструктора, причем один из них «по умолчанию»
Помогите доделать пожалуйста Класс, описывающий прямоугольный параллелепипед. Класс должен иметь методы, решающие следующие...

Описать абстрактный класс породить от него еще два,один должен остаться абстрактным,другой должен быть способен пораждать объекты
Знает кто как сделать?

Как соединить два кода в один или изменить один из них ?
Помогите прикрутить 4ри проверки особых ситуаций в этом коде 1 Вначале проверяем подойдет ли нам значение,по условию подходят только...

Есть два списка: один [a, b, c], другой [1, 2, 3]. Нужно вывести один список вида [a-1, b-2, c-3]
Помогите решить, пожалуйста. Есть два списка: один , другой . Нужно вывести один список вида

Один на один, или как привязать два пересекающихся объекта друг к другу?
Здравствуйте! Сразу к делу: чтобы было понятно, представьте себе дорогу(трассу, с видом сверху) по которой движутся автомобили без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru