【问题标题】:How can I show all this images in a carousel如何在轮播中显示所有这些图像
【发布时间】:2020-09-19 13:20:50
【问题描述】:

我知道初学者可能会提出愚蠢的问题,但这就是解决问题的方式。 我可以在轮播中列出所有这些图像吗?或图片库。我怎样才能最简单地列出这些图像?

你有什么建议?

我不想使用外键,因为我不能(我还不能理解视图中的保存过程)在视图中保存单独的模型。 非常感谢

class MyFamily(models.Model):
    author = models.ForeignKey(Profile, on_delete=models.CASCADE)
    date = models.DateField(auto_now_add=True)
    update = models.DateField(auto_now=True)
    title = models.CharField(max_length=100)
    explanatipon = models.TextField(blank=True)
    photo1 = models.ImageField(upload_to='posts/photos/')
    photo2 = models.ImageField(upload_to='posts/photos/')
    photo3 = models.ImageField(upload_to='posts/photos/')
    photo4 = models.ImageField(upload_to='posts/photos/')
    photo5 = models.ImageField(upload_to='posts/photos/')
    active = models.BooleanField(default=True)

    def __str__(self):
        return str(self.title)[:30]

我试图让它像@willem-van-onsem 提到的那样,但没有成功。我需要帮助

我做了什么:

模特简介:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField()
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.user.username)

模型我的家人:

class MyFamily(models.Model):
    author = models.ForeignKey(Profile, on_delete=models.CASCADE)
    date = models.DateField(auto_now_add=True)
    update = models.DateField(auto_now=True)
    title = models.CharField(max_length=100)
    explanatipon = models.TextField(blank=True)
    photo1 = models.ImageField(upload_to='posts/photos/')
    photo2 = models.ImageField(upload_to='posts/photos/')
    photo3 = models.ImageField(upload_to='posts/photos/')
    photo4 = models.ImageField(upload_to='posts/photos/')
    photo5 = models.ImageField(upload_to='posts/photos/')
    active = models.BooleanField(default=True)

    @property
    def photos(self):
        photos = [self.photo1, self.photo2, self.photo3, self.photo4, self.photo5]
        return [photo for photo in photos if photo is not None]

    def __str__(self):
        return str(self.title)[:30]

视图:

def photo(request):
    myfamily = MyFamily.objects.filter(active=True)

    context = {
        'myfamily':myfamily
    }
    return render(request, 'posts/create-form.html')

【问题讨论】:

  • 一个人只能上传五张照片?
  • 不,这只是一个测试模型。当然,它可以更多,也可以更少。我是 django 的新手,我尝试学习。对不起。

标签: django-models django-forms django-views django-templates


【解决方案1】:

您可以在列表中返回照片:

class MyFamily(models.Model):
    # …

    @property
    def photos(self):
        photos = [self.photo1, self.photo2, self.photo3, self.photo4, self.photo5]
        return [photo for photo in photos if photo is not None]

如果您构造一个视图,其中将MyFamily 对象作为myfamily 传递给模板渲染引擎,我们可以为Bootstrap carousel 生成HTML:

<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
  <div class="carousel-inner">
    {% for photo in myfamily.photos %}
    <div class="carousel-item {% if forloop.first %}active{% endif %}">
      <img class="d-block w-100" src="{{ photo.url }}" alt="First slide">
    </div>
    {% endfor %}
  </div>
</div>

话虽如此,我认为建模可能会通过额外的模型得到改进。现在一个只能上传五个对象。通常,在这种情况下,定义一个额外的模型 (MyFamilyPhoto) 与 ForeignKeyMyFamily,以允许为每个 MyFamily 生成任意数量的 MyFamilyPhotos。对于任意 MyFamily 对象,您需要向 url 添加一个参数。在视图中,您可以通过以下方式获取用户的myfamily

from django.contrib.auth.decorators import login_required

@login_required
def photo(request):
    myfamily = MyFamily.objects.get(active=True, author__user=request.user)
    context = {
        'myfamily': myfamily
    }
    return render(request, 'posts/create-form.html')

注意:您可以使用 @login_required decorator [Django-doc].

【讨论】:

  • @YukselBastan:我没有。 -1 的问题是其他人的问题……我很少(直接)投反对票。但我仍然认为数据显示两次的问题可能不包含足够的数据。例如,您在模板中使用listing_sales,但您从未将其传递给模板,因此它将为空。可能重复在模板中的其他地方。
  • @YukselBastan: myfamily = Post.objects.all()myfamily 不应该是 MyFamily 对象(不是 .all(),而是单个对象)。
  • @YukselBastan: Post.objects.all() 将返回 Post 对象的 collection,而不是 single 对象MyFamily* 对象。
  • @YukselBastan:不,你为什么使用PostPostMyFamily 模型有什么关系?此外,Profile 的外观如何?为什么从MyFamilyProfile没有OneToOneField,而是ForeignKey
  • @YukselBastan:基于登录用户的MyFamily,见编辑。
猜你喜欢
  • 1970-01-01
  • 2017-11-20
  • 2018-01-12
  • 2021-02-23
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
相关资源
最近更新 更多