【问题标题】:django - How to check choices of an object and display corresponding item on htmldjango - 如何检查对象的选择并在 html 上显示相应的项目
【发布时间】:2019-06-21 04:09:25
【问题描述】:

我正在开发一款允许上传图片的照片应用。从那里,每张照片都有选择选项——“公共”或“私人”——。对于“公开”的图像,图像将显示在主页上,无需用户授权。但是,我发现难以根据选择过滤图像并在主页上显示相关对象。

我是编码和 Django 的新手,希望能得到一些建议。提前致谢!

这是我的 models.py 文件:

class Images(models.Model):
    title = models.CharField(max_length=100)
    image = models.ImageField(upload_to='images/')

    PRIVATE ='PR'
    PUBLIC = 'PU'

    PUBLISH_CHOICES = [
            (PRIVATE, 'Private'),
            (PUBLIC, 'Public'),]
    publish = models.CharField(max_length=7,
                        choices=PUBLISH_CHOICES,
                        default=PRIVATE)


    def __str__(self):
        return self.title


这是我的views.py文件

class HomePageView(ListView):
    model = Images
    template_name = 'index.html'

    def my_view(request):
        myimages = Images.objects.all()
        for entry in myimages:
            publish_status = entry.get_publish_display()
        return publish_status

这是我的 index.html 文件:

{% for images in images_list %}
  {% if publish_status == Public %}
    <div class="container">
      <h3>{{images.title}}</h3>
      <img src="{{images.image.url}}" alt=" {{images.title}}">
    </div>  
  {% endif %}
{% endfor %}

【问题讨论】:

    标签: python django


    【解决方案1】:

    通用 ListView 返回所有 Images 的列表,您可以将它们传递给模板 - 就像您正确地做的那样 - 然后按 publish 过滤字段可以是 PU 以获取 Public 或 @ 987654326@ 为Private。

    views.py 变为:

    class HomePageView(ListView):
        model = Images
        template_name = 'index.html'
    

    index.html 变为:

    {% for images in images_list %}
      {% if images.publish == 'PU' %}
        <div class="container">
          <h3>{{images.title}}</h3>
            <h2>{{ images.image.url }}</h2>
          <img src="{{ images.image.url }}" alt="{{images.title}}">
        </div>
      {% endif %}
    {% endfor %}
    

    干杯。

    【讨论】:

    • @LishanHo 我很高兴它对你有用。请您接受我的答案作为正确答案。谢谢。
    【解决方案2】:

    您可以获取所有图像,将它们传递给模板,然后根据 publish_status 进行过滤。下面是它的样子。

    views.py:

    class HomePageView(ListView):
        model = Images
        template_name = 'index.html'
    

    index.html:

    {% for image in object_list %}
      {% if image.publish_status == 'Public' %}
        <div class="container">
          <h3>{{images.title}}</h3>
          <img src="{{images.image.url}}" alt=" {{images.title}}">
        </div>  
      {% endif %}
    {% endfor %}
    

    【讨论】:

      【解决方案3】:
      {% for image in object_list %}
        {% if image.publish_status == 'Public' %}
          <div class="container">
            <h3>{{images.title}}</h3>
            <img src="{{images.image.url}}" alt=" {{images.title}}">
          </div>  
        {% endif %}
      {% endfor %}
      

      试试这个。编辑你的 index.html 文件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-08
        • 2018-02-08
        • 1970-01-01
        • 2015-08-24
        • 2021-06-22
        相关资源
        最近更新 更多