显示与外键相关的图像

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

我已经搜索了互联网、ChatGPT、StackOverflow 等,但无法找到如何使我的 AWS S3 存储桶(来自外键)中的图像出现在我的模板中。当图像没有通过外键连接时,图像工作得非常好,我只显示学生和他们的图像。

views.py

#@login_required
@user_passes_test(lambda u: u.groups.filter(name='teacher').exists())
def hallpasses(request):
    students = HallPass.objects.filter(dateissued__date = todaysdate2.date )
    
    allstudents = Student.objects.all()

    

    context={'students':students,
             'todaysdate2':todaysdate2,
             'allstudents':allstudents,
             }
    return render(request, 'pass.html',context)

模型.py

#HallPass model
class HallPass(models.Model):

    DESTINATIONS=(
        ('Activities Office', 'Activities Office'),
        ('Alumni Office', 'Alumni Office'),
        ('Cafeteria', 'Cafeteria'),
        ('Chelsea Center', 'Chelsea Center'),
        ('Counseling Center', 'Counseling Center'),
        ('Cr. Counselor', 'Cr. Counselor'),
        ('Library', 'Library'),
        ('Nurse', 'Nurse'),
        ('Office 124', 'Office 124'),
        ('Office 157', 'Office 157'),
        ('Office 210', 'Office 210'),
        ('Office 308', 'Office 308'),
        ('Other', 'Other'),
        ('Locker', 'Locker'),
        ('Main Office', 'Main Office'),
        ('Teachers Room', 'Teachers Room'),
        ('Restroom', 'Restroom'),
        ('Water', 'Water'),
        ('WGHS Academy', 'WGHS Academy'),
        ('Art Department','Art Department'),
        ('Business Department','Business Department'),
        ('English Department','English Department'),
        ('FACS Department','FACS Department'),
        ('Industrial Tech Department','Industrial Tech Department'),
        ('Math Department','Math Department'),
        ('Music Department','Music Department'),
        ('Makerspace','Makerspace'),
        ('PE Department','PE Department'),
        ('Science Department','Science Department'),
        ('Social Studies Department','Social Studies Department'),
        ('SSD Department','SSD Department'),
        ('Theater Arts Department','Theater Arts Department'),
        ('World Languages','World Languages'),




    )

    student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name="images")
    dateissued = models.DateTimeField(null=False,blank=False)
    teacherissuing = models.ForeignKey(Teacher, on_delete=models.CASCADE,verbose_name="Teacher Issuing: ")
    #code = models.ImageField(blank=True, upload_to='static/images/code/') 
    duration = models.IntegerField(default=6)
    pass_number = models.AutoField(primary_key=True)
    #email = models.EmailField(max_length = 254,default=1)
    owner = models.IntegerField("Request Owner", blank=False, default=1)
    destination = models.CharField(max_length=30, null=True, choices = DESTINATIONS)

    def __str__(self) -> str:
        return "" + str(self.student) + ", " + str(self.dateissued)
#Student model
class Student(models.Model):
    firstname = models.CharField(max_length=200, null=True)
    lastname = models.CharField(max_length=200, null=True)
    grade = models.CharField(max_length=200, null=True)
    email = models.EmailField(max_length = 254,blank=True)
    eligible = models.BooleanField(default=True)
    #email = models.EmailField(max_length = 254,blank=True)
    image = models.ImageField(upload_to='images/',blank=True )

    def first_image(self):
        #code to determine image
        return self.images.first()

    def __str__(self):
        return self.lastname + ", " + self.firstname 
    class Meta:
        ordering = ['lastname', 'firstname'] 

不会出现图像的模板

{% for i in students %}
    <tr>
    <Td>
    #image will not load here
    <img src="{{ i.images.url }}" alt="" width="auto" height="340"/></Td>
        <td><b>{{i.student}}</b></td>
        <td >{{i.teacherissuing}}</td>
        <td style="text-align:center;">{{i.dateissued |date:"M d, Y H:i"}}</td>
        <td style="text-align:center;">{{i.duration}}</td>
        <td style="text-align:center;"></td>
    <td style="text-align:center;">{{i.pass_number}}</td>
    <td style="text-align:center;">{{i.destination}}</td>
     </tr>
{% endfor %}

我尝试过 related_name、嵌套循环、过滤、i.images.url 等。值得注意的是,图像存储在 AWS S3 存储桶中,并且上传到存储桶时工作得非常好,并且它确实提供了显示所有学生的模板上的图像(在此上下文中该图像不是外键关系)。仅当尝试通过外键关系连接到图像时,图像才会加载失败。

django django-models django-views django-templates
1个回答
0
投票

在你的模板文件中,你使用

{{ i.images.url }}
的地方,改为使用这个
{{ i.student.image.url }}
。 这将访问与 HallPass 实例相关的 Student 模型的图像字段。

你可以试试这个:

{% for i in students %}
    <tr>
        <td>
            <img src="{{ i.student.image.url }}" alt="" width="auto" height="340"/>
        </td>
        <td><b>{{ i.student }}</b></td>
        <td>{{ i.teacherissuing }}</td>
        <td style="text-align:center;">{{ i.dateissued | date:"M d, Y H:i" }}</td>
        <td style="text-align:center;">{{ i.duration }}</td>
        <td style="text-align:center;"></td>
        <td style="text-align:center;">{{ i.pass_number }}</td>
        <td style="text-align:center;">{{ i.destination }}</td>
    </tr>
{% endfor %}

此外,请检查 AWS S3 存储桶权限和 CORS 设置,以确保您的 Django 应用程序有权访问图像。

希望这能解决问题。

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