Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 26.09.2024
Сообщений: 6

Из БД в шаблон при отсутствии данных выдаёт ошибку

26.12.2024, 22:15. Показов 917. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У части записей в БД нет фото 2 и фото 3 (они были в модели как не обязательные поля)
Но при отправке этих записей из БД в шаблон, выдаётся ошибка. (если у записи в БД заполнены все поля, то ошибки нет.)
Как сделать так, чтобы исправить? Пробовал в шаблоне применить if/else - ничего не получилось

Models
Python
1
2
3
4
5
6
7
8
9
10
class Product(models.Model):
    name = models.CharField(max_length=50, help_text="Введите наименование товара", verbose_name="Наименование товара")
    photo_1 = models.ImageField(upload_to='images', help_text="Введите фото 1", verbose_name="Фото 1")
    photo_2 = models.ImageField(upload_to='images', help_text="Введите фото 2", verbose_name="Фото 2",
                                null=True, blank=True)
    photo_3 = models.ImageField(upload_to='images', help_text="Введите фото 3", verbose_name="Фото 3",
                                null=True, blank=True)
 
    def __str__(self):
        return self.name
views
Python
1
2
3
class ProductDetailView(DetailView):
    model = Product
    context_object_name = 'product'
templates
HTML5
1
2
3
4
5
6
7
8
9
10
11
{% extends "firstapp/base.html" %}
{% block content %}
<div>
    <h2>{{product.name}}</h2>
    <div>
        <img src="{{product.photo_1.url}}">
        <img src="{{product.photo_2.url}}">
        <img src="{{product.photo_3.url}}">
    </div>
</div>
{% endblock content %}
Добавлено через 1 час 42 минуты
Вопрос решился всё-таки применением инструкции if в шаблоне
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.12.2024, 22:15
Ответы с готовыми решениями:

Создал шаблон vs но выдаёт ошибку при включении main.cpp
Как решить проблему?

Мне выдаёт ошибку об отсутствии метода Main
Мне выдаёт ошибку, что у меня в программе не содержит статического метода &quot;Main&quot;, подходящего для точки входа namespace Prog { ...

Программа выдаёт ошибку при вызове конструкторов разных классов в списке.Используется шаблон
В чём суть проблемы: в односвязном списке есть функция загрузки из файла. Вот она: template &lt;typename T&gt; int...

7
14 / 13 / 2
Регистрация: 18.02.2012
Сообщений: 75
27.12.2024, 20:24
У None нет метода url. Т.е. если product.photo_2 будет None, то и получить url у None не получиться.
0
0 / 0 / 0
Регистрация: 26.09.2024
Сообщений: 6
28.12.2024, 22:49  [ТС]
Добавлено через 1 минуту
Если напрямую в шаблоне написать:
<img src="{{product.photo_2.url}}" style="max-width:410px">
то выдаёт ошиибку.
А если через if (причём можно написать вообще ерунду любую), то ошибки не выдаёт, всё работает замечательно:
{% if product.photo_2.url != fgfshf2fefg %}
<img src="{{product.photo_2.url}}" style="max-width:410px">
Почему так?
0
14 / 13 / 2
Регистрация: 18.02.2012
Сообщений: 75
28.12.2024, 22:52
Лучший ответ Сообщение было отмечено Sergey3434 как решение

Решение

Пробуй так:
{% if product.photo_2 %}
<img src="{{product.photo_2.url}}" style="max-width:410px">
0
0 / 0 / 0
Регистрация: 26.09.2024
Сообщений: 6
28.12.2024, 23:00  [ТС]
Да, так тоже работает без ошибок. Спасибо
0
14 / 13 / 2
Регистрация: 18.02.2012
Сообщений: 75
29.12.2024, 01:36
Ну и добавлю, что так составлять модели, как это сделали Вы, лучше не стоит, да и не правильно. Например, вдруг у продукта нужно будет указать не 3 фото, а 4. А потом пришёл заказчик и сказал хочу 5, а потом захочет опять 3. Так и будете поля туда-сюда то создавать, то удалять? Реляционные базы данных не просто так называются реляционными. Правильно будет примерно так:
Python
1
2
3
4
5
6
class Product(models.Model):
    name = models.CharField(max_length=50)
    
class ProductImage(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='images')
    image = models.ImageField(upload_to='images')
0
0 / 0 / 0
Регистрация: 26.09.2024
Сообщений: 6
03.01.2025, 00:27  [ТС]
Спасибо.
Но есть вопрос. До показа страницы с конкретным товаром мне нужно показать все товары на одной странице с информацией и фото.
В этом случае в представлении передаю для шаблона словарь с двумя элементами: Первый - данные из БД на основе модели продукт. Второй - данные из БД на основе модели Фото.
Раньше в шаблоне я с помощью цикла for показывал все товары, информацию и фото к ним. Это было просто, т.к. вся информация и фото были в одной модели. А как быть сейчас? Мне нужно вывести все товары и сразу фото к ним.
Если также раскрывать в шаблоне данные из словаря по продукту с помощью for, то как тогда сопоставлять фото из другого элемента словаря? Функциональность шаблона HTML это позволяет сделать?
0
14 / 13 / 2
Регистрация: 18.02.2012
Сообщений: 75
03.01.2025, 00:56
Всё делайте как и раньше.
Python
1
2
3
class ProductDetailView(DetailView):
    model = Product
    context_object_name = 'product'
А в шаблоне обращаемся к фото тоже через for:
{% for image_obj in product.images.all %}
<img src="{{image_obj.image.url}}" style="max-width:410px">

Пишу по памяти, могу ошибиться. По-хорошему ещё нужно сделать prefetch_related('images'), но работать должно и без.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.01.2025, 00:56
Помогаю со студенческими работами здесь

Программа выдает ошибку об отсутствии окружающих операторов for while и repeat
кусочек кода с ошибкой for i:=1 to n do; begin arX:=random; if i=1 then break; { Здесь выдает ошибку об отсутствии...

Тормозят страницы в браузере и выдает ошибку об отсутствии Windows instaler
Пытался переустановить Microsoft Office с 2010 на 2007, выдавались ошибки как при удалении 2010 го так и при установке 2007, затем при...

При вводе данных выдает ошибку
uses Unit1; {$R *.dfm} procedure TForm2.FormShow(Sender: TObject); begin ...

Выдаёт ошибку при сохранении данных в БД
Вот ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to...

Выдает ошибку при вставке данных в БД
Здравствуйте скажите почему когда я вставляю данные в БД то у меня постоянно срабатывает вот это условие if (rs == null) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru