@ooker

Правильное отображение нескольких моделей на странице в Джанго?

Добрый день. Не могу понять как можно правильно отобразить последовательность блоков на главной странице.
Нужно отобразить блок последнии по дате добавления, но моделей несколько. При отображении уже имеющиеся не пускают верхнии. Есть вариант сделать из текущего кода, или надо делать новую модель(одну из всех).
Вот код html страницы
{% for haircut in haircut %}
					<div class="blog vertical-blog col-lg-4 col-md-4 col-sm-6 col-xs-12">
                        <div class="blog-foto"><a href="{{ haircut.get_absolute_url }}"><img src="/media/{{ haircut.haircut_image_field }}"></a></div>
						<div class="blog-date">{{ haircut.haircut_datetime }}</div>
						<div class="blog-subtitle"><a href="{% url 'blog_haircut' %}">Парикмахерская</a></div>
						<div class="blog-title"><a href="{{ haircut.get_absolute_url }}">{{ haircut.haircut_title }}</a></div>
                    </div>
                    {% endfor %}
                    {% for nails in nails %}
					<div class="blog vertical-blog col-lg-4 col-md-4 col-sm-6 col-xs-12">
                        <div class="blog-foto"><a href="{{ nails.get_absolute_url }}"><img src="/media/{{ nails.nails_image_field }}"></a></div>
						<div class="blog-date">{{ nails.nails_datetime }}</div>
						<div class="blog-subtitle"><a href="{% url 'blog_nails' %}">Маникюр</a></div>
						<div class="blog-title"><a href="{{ nails.get_absolute_url }}">{{ nails.nails_title }}</a></div>
                    </div>
                    {% endfor %}


Вью
class BlogMainPage(TemplateView):  # Главная страница 
    template_name = "blog/blog.html"

    def get(self, request, **kwargs):
        haircut = BlogArticlesHairCut.objects.all()
        nails = BlogArticlesNail.objects.all()
        cosmetologia = BlogArticlesCosmetologia.objects.all()
        tatoo = BlogArticlesTatoo.objects.all()
        spa = BlogArticlesSpa.objects.all()
        makeup = BlogArticlesMakeUp.objects.all()
        depil = BlogArticlesDepil.objects.all()
        promoheader = BlogBlock1.objects.all()
        promocenter = BlogBlock2.objects.all()
        promofooter = BlogBlock3.objects.all()
        ctx = {
            'haircut': haircut,
            'nails': nails,
            'tatoo': tatoo,
            'spa': spa,
            'depil': depil,
            'cosmetologia': cosmetologia,
            'makeup': makeup,
            'promoheader': promoheader,
            'promocenter': promocenter,
            'promofooter': promofooter,
        }
        return render(request, self.template_name, ctx)
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
fox_12
@fox_12 Куратор тега Django
Расставляю биты, управляю заряженными частицами
У вас вообще какая-то жесть с архитектурой, помимо тех ошибок что привели выше.
Вас вообще не смущает что столько объектов пытаетесь влепить на одну страницу?
Наверняка можно выделить модель BlogArticles в которую вынести общие поля. К примеру дата добавления - у вас уже общая для всех блоков. И выводить на страницу BlogArticles
И к ней уже лепить специфичные модели - теми же OneToOne отношениями.
И там ваш вопрос решится сам собой...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@bacon
1. у TemplateView надо переопределять get_context_data, а не get
2. зачем эта куча BlogArticlesXXX, подозреваю что хватит одной модели BlogArticles, с promo аналогично
3. имя модели принято давать в единственном числе, а в полях не дублировать название не nails_title, а просто title
4.
{% for haircut in haircut %}, {% for nails in nails %}
вот этот песец надо объяснять?
Ответ написан
@AstraVlad
Финансист, консультант, программист-любитель
Я правильно понял, что это все -- записи блога? Тогда зачем для записей разных тематик делать разные модели? Делаем одну единственную модель и в ней проставляем поле "Тема" (прически, ногти и т.д.). Перед выводом сортируем по тематике и выводим в одном цикле.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы