Django отображает фотографию из модели

#python #django

#python #django

Вопрос:

Я пробовал несколько методов получения изображения из модели, но безуспешно, и это то, где я нахожусь до сих пор. Я бы хотел, чтобы изображение отображалось, и когда пользователь нажимает на него, он открывает модальное отображение деталей проекта.

models.py

 class Project(models.Model):
   author = models.ForeignKey('auth.User')
   title = models.CharField(max_length=200)
   client = models.CharField(max_length=200)
   date = models.DateField(timezone.now())
   service = models.CharField(max_length=200)
   info = models.TextField()
   photo = models.ImageField(upload_to='ports/static/img/',
                          default='ports/static/img/port_photo.png',
                          height_field='photo_height',
                          width_field='photo_width',)
   photo_height = models.PositiveIntegerField(blank=True, default=900)
   photo_width = models.PositiveIntegerField(blank=True, default=650)
   created_date = models.DateTimeField(
    default=timezone.now)
   published_date = models.DateTimeField(
    blank=True, null=True)
  

index.html

 <section id="portfolio">
    {% for project in projects %}
        <div class="row">
            <div class="col-lg-12 text-center">
                <h2>Portfolio</h2>
                <hr class="star-primary">
            </div>
        </div>
        <div class="row">
            <div class="col-sm-4 portfolio-item">
                <a href="#portfolioModal1" class="portfolio-link" data-toggle="modal">
                    <div class="caption">
                        <div class="caption-content">
                            <i class="fa fa-search-plus fa-3x"></i>
                        </div>
                    </div>
                    <img src="{{ projects.photo.url }}" class="img-responsive" alt="">
                </a>
            </div>
        </div>
    </div>
    {% endfor %}
</section>
  

views.py

 from django.shortcuts import render
from .forms import ContactForm
from django.utils import timezone
from .models import Project
# Create your views here.


def index(request):
    form_class = ContactForm
    projects = Project.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')
    return render(request, 'ports/index.html', {'form': form_class, 'projects': projects})
  

Ответ №1:

Посмотрите на свой img тег. В атрибуте src вы используете {{ projects.photo.url }} . Итак, вы не можете получить изображение из набора запросов, вы можете сделать это только из объекта Project model. Используйте {{ project.photo.url }}

Комментарии:

1. Большое спасибо, мне тоже пришлось изменить

2. …. фото = модели. ImageField(upload_to=’ports/static/img/’, default=’ports/static/img/port_photo.png’, height_field=’photo_height’, width_field=’photo_width’,)

3. к фото = модели. ImageField(upload_to=’static/img/’, default = ‘static /img/ port_photo.png’, height_field= ‘photo_height’, width_field = ‘photo_width’,) и перенесите базу данных, затем повторно загрузите изображение.