Я выполняю обучающий проект и столкнулся с проблемой - PullRequest
1 голос

Я выполняю учебный проект и столкнулся с проблемой. Я пытаюсь вывести блок «события» и блок «новости» на главной странице, но при запуске цикла l oop отображается только один блок, а второй не отображается. Объясните, кто знает, что я делаю не так. Решаю эту проблему вот уже три дня. Заранее спасибо, кто ответит на помощь

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{% if post %}
    {% for post in post %}
        {{ post.title }}
    {% endfor %}
{% else %}
    <p>У вас нет материала</p>
{% endif %}
{% if event %}
    {% for event in event %}
        {{ event.name }}
    {% endfor %}
{% else %}
    <p>У вас нет материала</p>
{% endif %}



</body>
</html>

Просмотры:

from django.shortcuts import get_object_or_404, render
from django.views.generic.base import View

from .models import Blog, Event
# Create your views here.

class EventView(View):
    def get(self, request):
        event = Event.objects.all()
        return render(request, "home/home_list.html", {"event": event})

class BlogView(View):
    def get(self, request):
        post = Blog.objects.all()
        return render(request, "home/home_list.html", {"post": post})

URL:

from django.urls import path
from . import views

urlpatterns = [
    path("", views.EventView.as_view()),
    path("", views.BlogView.as_view())

]

Модели:

from django.db import models
from datetime import date

# Create your models here.

class Blog(models.Model):
    """Новости"""
    title = models.CharField("Заголовок", max_length=100)
    description = models.TextField("Описание")
    descriptionTwo = models.TextField("Описание (второй абзац)", blank=True, default="")
    blockquote = models.TextField("Цитата", blank=True, default="")
    short = models.TextField("Краткое описание", max_length=300)
    poster = models.ImageField("Изображение", upload_to="post/")
    prewiew = models.ImageField("Превью", upload_to="post/")
    dataPost = models.DateField("Дата публикации", default=date.today)
    url = models.SlugField(max_length=160, unique=True, blank=True)
    draft = models.BooleanField("Черновик", default=False)


    def __str__(self):
        return self.title


    class Meta:
        verbose_name = "Новости"
        verbose_name_plural = "Новости"


class Event(models.Model):
    """События"""
    name = models.CharField("Заголовок", max_length=100)
    adress = models.TextField("Адрес")
    description = models.TextField("Описание")
    short = models.TextField("Краткое описание")
    phone = models.TextField("Контактный номер телефона")
    email = models.EmailField()
    image = models.ImageField("Изображение", upload_to="event/")
    dataStart = models.DateField("Дата старта", default=date.today)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Событие"
        verbose_name_plural = "События"

Администратор:

from django.contrib import admin
from .models import Blog, Event

# Register your models here.

admin.site.register(Event)
admin.site.register(Blog)

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Представления

Вам нужно одно представление с контекстом, содержащим как events, так и posts

class EventView(View):
    def get(self, request):
        events = Event.objects.all()
        posts = Blog.objects.all()
        return render(request, "home/home_list.html", {"events": events, "posts":posts})

Шаблон

В шаблоне l oop по обоим

{% if posts %}
{% for p in posts %}
    {{ p.title }}
{% endfor %}
{% else %}
<p>У вас нет материала</p>
{% endif %}
{% if events %}
{% for e in events %}
        {{ e.name }}
    {% endfor %}
{% else %}
    <p>У вас нет материала</p>
{% endif %}
0 голосов
/ 08 мая 2020

In для каждого l oop используйте разные имена для «l oop Object» и списка / словаря, по которому вы выполняете цикл. КАК ЭТО:

{% if post %}
    {% for p in post %}
        {{ p.title }}
    {% endfor %}
{% else %}
    <p>У вас нет материала</p>
{% endif %}
{% if event %}
    {% for e in event %}
        {{ e.name }}
    {% endfor %}
{% else %}
    <p>У вас нет материала</p>
{% endif %}


Решил ли он вашу проблему?

...