Django - Показать несколько изображений - PullRequest
0 голосов
/ 29 апреля 2020

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

Только внешний div выходит из источника html. Отлаживая шаблон, я также замечаю, что for l oop принимает все главы в БД, а не только выбранную мной главу. Я думаю, что мне нужно как-то ограничить запрос представления ChapDetail.

Может кто-нибудь посоветовать мне эту проблему?

model.py

def image_dir_path(instance, filename):
    book = instance.chap.book.slug
    chapter = instance.chap.slug
    return os.path.join(book, chapter, str(uuid.uuid4().hex))


class Chapter(models.Model):
    user = models.ForeignKey(
            settings.AUTH_USER_MODEL,
            on_delete=models.CASCADE,
            default=settings.AUTH_USER_MODEL
    )
    book = models.ForeignKey(
            Book,
            related_name='chapters',
            on_delete=models.CASCADE,
            default=''
    )
    title = models.CharField(max_length=130, unique=True)
    slug = models.SlugField(max_length=150, blank=True)
    created_at = models.DateField(auto_now_add=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('chap_detail')


class ShowImages(models.Model):
    chapter =models.ForeignKey(
            Chapter,
            on_delete=models.CASCADE,
            default='',
            related_name="pics"
    )
    picture = models.FileField(upload_to=image_dir_path, default='')

    def __str__(self):
        return self.picture.name 

view.py

class ChapDetail(generic.ListView):
    model = Chapter
    template_name = 'chapters/chapter_detail.html'

urls.py

app_name = 'chapters'

urlpatterns = [
    path('<str:book>', views.BookChaps.as_view(), name='chap_list'),
    path('<str:book>/<str:slug>/', views.ChapDetail.as_view(), name='chap_detail'), # both slug fields
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

template

<div style="padding-top: 10px; display: block;">
    {% for i in chapter.picture_set.all %}
        <div>
            <img src="{{ i.picture.url }}" alt="Not found">
        </div>
    {% endfor %}
</div>

папка мультимедиа:

enter image description here

1 Ответ

0 голосов
/ 29 апреля 2020

Для ограничения вашего запроса вы можете использовать метод .filter () Фильтр Django Документы Это будет что-то вроде строки Chapter.objects.filter(id=id).

Вы можете получить идентификатор ( или другой параметр фильтра) из ваших параметров пути в URL.

Для отсутствующих изображений вы уверены, что ваш URL-адрес MEDIA задан правильно в настройках?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...