我正在做一个培训项目,遇到了一个问题。

问题描述 投票:0回答:1

我正在做一个培训项目,遇到了一个问题。我尝试在主页面显示 "事件 "块和 "新闻 "块,但是当我运行循环周期时,只显示一个块,第二个块不显示。解释一下,谁知道我做错了什么。这个问题我已经解决了三天了。先谢谢谁能回复帮助

<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})

Urls:

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)
django for-loop url view model
1个回答
0
投票

浏览次数

你需要一个包含上下文的视图,其中包含了 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})

模板

在模板中,在这两个地方循环

{% 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
投票

在每个循环中,为 "循环对象 "和你正在循环的listdictionary使用不同的名称。就像这样。

{% 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 %}


它解决了你的问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.