Показать изображение в шаблоне

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

Заранее спасибо.

модель.ру:

class DeviceType(models.Model):
    type_name = models.CharField(primary_key=True, max_length=64, unique=True)
    type_description = models.TextField(max_length=512, blank=True)

    def __str__(self):
        return self.type_name

    def get_absolute_url(self):
        return reverse("devices:type-detail", kwargs = {"pk": self.pk})


class DeviceTypeImage(models.Model):
    image_status = IntegerField(unique=True)
    image = models.ImageField(upload_to='images/types/')
    image_device_type = models.ForeignKey(DeviceType, on_delete=models.CASCADE, related_name='image')

    def __str__(self):
        return str(self.image_status)

    def get_absolute_url(self):
        return reverse("devices:type-detail", kwargs = {"pk": self.pk})

вид.py:

class DeviceTypeDetailView(DetailView):
    template_name = 'devices/type-detail.html'
    model = DeviceType

    def get_object(self):
        return get_object_or_404(DeviceType, pk=self.kwargs.get("pk"))

шаблон:

<h1>Type detail</h1>

{{ object.type_name }}<br>
{{ object.type_description }}<br>
{{ object.image_status }}<br>
{{ object.image_device_type }}

<img src = "{{ object.image.url }}" alt = "...">

URL.py:

urlpatterns = [
    ....
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
object это DeviceType, а не DeviceTypeImage.
Willem Van Onsem 23.12.2020 22:19

И как я могу получить доступ к своему изображению в шаблоне? не осуществляется ли автоматический доступ к модели DeviceTypeImage при вызове get_object_or_404(DeviceType, pk=self.kwargs.get("pk"))?

fbzyx 23.12.2020 22:23

ну, так как это ForeignKey, изображения нет: у DeviceType может быть ноль, одна или несколько связанных DeviceTypeImages.

Willem Van Onsem 23.12.2020 22:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
312
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

object это DeviceType, а не DeviceTypeImage. Кроме того, DeviceType может иметь несколько DeviceTypeImage, поэтому object.image является менеджером DeviceTypeImage: он может переносить ноль, одно или несколько изображений.

Таким образом, вы получаете доступ к изображениям с помощью:

{{ object.type_name }}<br>
{{ object.type_description }}<br>

{% for image in object.image.all %}
    {{ image.image_status }}
    <img src = "{{ image.image.url }}">
{% endfor %}

Другие вопросы по теме