IF语句在Django项目的FOR循环中工作不正常

IF语句在Django项目的FOR循环中工作不正常,django,python-3.x,Django,Python 3.x,在过去的几个月里,我一直在学习Django。现在我正在做一个演示项目,这个项目是关于那些可以教授首选科目的教师的。但在工作了几天后,我无法超越编程知识的某些局限性。我想在一些选定的帖子上显示一个按钮。我使用FOR循环来创建post模型,在其中我还使用了IF语句。但它没有按照我想要的方式工作。我希望该按钮仅在教师可用时显示。你们能帮我解决这个问题吗?提前谢谢 在Post模型中,我包含了一些布尔字段,并将它们的默认值设置为False。在博客视图中,我为这些布尔字段创建了一些查询集,以便在需要时调用它

在过去的几个月里,我一直在学习Django。现在我正在做一个演示项目,这个项目是关于那些可以教授首选科目的教师的。但在工作了几天后,我无法超越编程知识的某些局限性。我想在一些选定的帖子上显示一个按钮。我使用FOR循环来创建post模型,在其中我还使用了IF语句。但它没有按照我想要的方式工作。我希望该按钮仅在教师可用时显示。你们能帮我解决这个问题吗?提前谢谢

在Post模型中,我包含了一些布尔字段,并将它们的默认值设置为False。在博客视图中,我为这些布尔字段创建了一些查询集,以便在需要时调用它们。当我在HTML中使用它们时,我没有得到任何错误。请看下面的代码

这是教师应用程序的教师模型

from django.db import models
from django.utils import timezone
from PIL import Image

class Teacher(models.Model):
    name = models.CharField(max_length = 100)
    teacher_photo = models.ImageField(upload_to = 'photos/%Y/%m/%d/')
    description = models.TextField()
    teacher_govt_id = models.CharField(unique = True ,max_length = 20)
    phone = models.CharField(unique = True ,max_length = 20)
    nid = models.CharField(unique = True ,max_length = 14)
    email = models.CharField(max_length = 50)
    is_selected = models.BooleanField(default = False)
    join_date = models.DateTimeField(default = timezone.now)

    def __str__(self):
        return self.name

    def save(self):
        super().save()

        img = Image.open(self.teacher_photo.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.teacher_photo.path)
# from django.forms import ModelForm
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from teacher.models import Teacher

class Post(models.Model):
    teacher = models.ForeignKey(Teacher, on_delete = models.DO_NOTHING, blank=True, null=True)
    author = models.ForeignKey(User, on_delete = models.CASCADE)
    title = models.CharField(max_length = 100)
    clip = models.FileField(upload_to = 'videos/%Y/%m/%d/')
    description = models.TextField(max_length = 2400)
    publish = models.DateTimeField(default = timezone.now)
    created = models.DateTimeField(auto_now_add = True)
    updated = models.DateTimeField(auto_now = True)
    is_published = models.BooleanField(default = True)
    is_group = models.BooleanField(default = False)
    is_private = models.BooleanField(default = False)
    is_available = models.BooleanField(default = False)

    def __str__(self):
        return self.title
这是博客应用程序的帖子模型

from django.db import models
from django.utils import timezone
from PIL import Image

class Teacher(models.Model):
    name = models.CharField(max_length = 100)
    teacher_photo = models.ImageField(upload_to = 'photos/%Y/%m/%d/')
    description = models.TextField()
    teacher_govt_id = models.CharField(unique = True ,max_length = 20)
    phone = models.CharField(unique = True ,max_length = 20)
    nid = models.CharField(unique = True ,max_length = 14)
    email = models.CharField(max_length = 50)
    is_selected = models.BooleanField(default = False)
    join_date = models.DateTimeField(default = timezone.now)

    def __str__(self):
        return self.name

    def save(self):
        super().save()

        img = Image.open(self.teacher_photo.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.teacher_photo.path)
# from django.forms import ModelForm
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from teacher.models import Teacher

class Post(models.Model):
    teacher = models.ForeignKey(Teacher, on_delete = models.DO_NOTHING, blank=True, null=True)
    author = models.ForeignKey(User, on_delete = models.CASCADE)
    title = models.CharField(max_length = 100)
    clip = models.FileField(upload_to = 'videos/%Y/%m/%d/')
    description = models.TextField(max_length = 2400)
    publish = models.DateTimeField(default = timezone.now)
    created = models.DateTimeField(auto_now_add = True)
    updated = models.DateTimeField(auto_now = True)
    is_published = models.BooleanField(default = True)
    is_group = models.BooleanField(default = False)
    is_private = models.BooleanField(default = False)
    is_available = models.BooleanField(default = False)

    def __str__(self):
        return self.title
这里是post的视图

from django.shortcuts import render
from . models import Post
from teacher.models import Teacher

def post_list(request):
    posts = Post.objects.order_by('-publish').filter(is_published = True)

    # get teacher
    teacher_available = Post.objects.filter(is_available = True)
    assigned_private_teacher = Post.objects.all().filter(is_private = True)
    assigned_group_teacher = Post.objects.all().filter(is_group = True)
    teacher_selected = Teacher.objects.filter(is_selected = True)

    context = {
        'posts': posts,
        'teacher_available': teacher_available,
        'assigned_private_teacher': assigned_private_teacher,
        'assigned_group_teacher': assigned_group_teacher,       
        'teacher_selected': teacher_selected
    }

    return render(request, 'blog/home.html', context)
这是HTML文件

{% extends 'base.html' %}
{% load static %}

{% block content %}   

<a class="skip-link screen-reader-text" href="#content">Skip to content</a>

<!-- <div class="badge"></div> -->

<main id="content" class="main-area">

    {% for post in posts %}
    <section class="main-content">
        <div class="teacher-student">
            <div class="teacher">
                <img src="{% static 'img/headshot.jpg' %}" alt="">
                <!-- <p>TEACHER</p> -->
                <a href="user_profile.html">{{ post.author.get_full_name }}</a>
                <small>{{ post.publish }}</small>
            </div>
            <div class="available">
                {% if teacher_available %}                    
                        <a href="#">Teacher Available</a>
                {% endif %}                
            </div>

        </div>

        <div class="main-article">
            <a href="detail.html">
                <h1>{{ post.title }}</h1>
            </a>
            <video playsinline oncontextmenu="return false;" controls preload="metadata" controlsList="nodownload"
                disablePictureInPicture src="{{ post.clip.url}}" type='video/mp4'>

            </video>

            <article>
                <p>
                    Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores magni eveniet
                    praesentium esse molestias iusto doloremque ducimus nobis ex hic. Natus, ipsum...
                </p>
            </article>
            <div class="total-like-share">
                <p class="like"><span>Like 400</span></p>
                <p class="share"><span>Comments 4000</span></p>
            </div>

        </div>

    </section>
    {% endfor %}

</main>


<!-- Left Side Bar -->
<aside class="sidebar-left">
    <div class="left-sidebar">
        <h2 class="left-sidebar-title">Result Board</h2>
        <div class="updates-contens">
            <p><a href="#">Recent Results</a></p>
            <p><a href="#">Old Results</a></p>            
        </div>
    </div>


</aside>

<!-- Right Side Bar -->
<aside class="sidebar-right">
    <div class="right-sidebar">
        <h2 class="right-sidebar-title">Post Updates</h2>
        <div class="updates-contens">
            <p><a href="#">Latest Posts</a></p>
            <p><a href="#">Most comented posts</a></p>
            <p><a href="#">Most shared posts</a></p>
        </div>

    </div>
</aside>

{% endblock content %}
{%extends'base.html%}
{%load static%}
{%block content%}
{posts%%中的post为%s}
{{post.publish}
{%如果教师可用%}
{%endif%}

{%endblock内容%}
您不需要通过上下文发送可用的
teacher\u
,您可以访问
post
变量:

<div class="available">
    {% if post.is_available %}                    
            <a href="#">Teacher Available</a>
    {% endif %}                
</div>
最后,您不需要通过上下文发送
teacher\u available
assigned\u private\u teacher
assigned\u group\u teacher
,因为您可以从
帖子中访问这些值,如下所示:

{% for post in posts %}

    {% if post.is_avalilable %}
       // do something
    {% endif %}

    {% if post.is_private %}
       // do something
    {% endif %}

    {% if post.is_group %}
       // do something
    {% endif %}

    {% if post.is_selected %}
       // do something
    {% endif %}

{% endfor %}

您不需要通过上下文发送
teacher\u available
,您可以在
post
变量中访问:

<div class="available">
    {% if post.is_available %}                    
            <a href="#">Teacher Available</a>
    {% endif %}                
</div>
最后,您不需要通过上下文发送
teacher\u available
assigned\u private\u teacher
assigned\u group\u teacher
,因为您可以从
帖子中访问这些值,如下所示:

{% for post in posts %}

    {% if post.is_avalilable %}
       // do something
    {% endif %}

    {% if post.is_private %}
       // do something
    {% endif %}

    {% if post.is_group %}
       // do something
    {% endif %}

    {% if post.is_selected %}
       // do something
    {% endif %}

{% endfor %}

我正在检查它。并很快让你知道结果。谢谢你的及时帮助。非常感谢鲁德拉救了我一天。你的第一个解决方案像魔术一样解决了我的问题。你是个魔术师,我现在正在检查。并很快让你知道结果。谢谢你的及时帮助。非常感谢鲁德拉救了我一天。你的第一个解决方案像魔术一样解决了我的问题。你是个魔术师。