Ваше решение почти правильное, вы просто неправильно использовали объекты в своем шаблоне.Если вы передаете объект в свой шаблон, вы можете получить доступ к его атрибутам, используя нотацию .
.Я изменил ваш detail
вид таким образом, чтобы переменные имели больше смысла при обращении к ним в шаблоне.
def detail(request, Dreams_id):
try:
dream = Dreams.objects.get(pk=Dreams_id)
contexto = {'dream': dream}
except Dreams.DoesNotExist:
raise Http404("sem sonhos")
return render(request, 'detail.html', contexto)
Теперь вы можете получить доступ к заголовку и изображению, используя {{ dream.titulo }}
и {{ dream.imagem }}
.
<img src="{{ dream.imagem }}">
<h2>{{ dream.titulo }}</h2>
Чтобы получить доступ к указанным Wich
объектам, вы должны знать, что Django автоматически создает обратное отношение , добавляя атрибут <model>_set
к указанной модели.В вашем случае dream.wich_set
.Это экземпляр RelatedManager и предоставляет такие методы, как .filter()
, .all()
, ... для извлечения объектов из базы данных.
Это обратное отношение является One-To-Многие отношения.Вот почему мы получаем несколько результатов и вынуждены перебирать их в шаблоне, используя для -loop
<img src="{{ dream.imagem }}">
<h2>{{ dream.titulo }}</h2>
{% for wich in dream.wich_set.all %}
<h3>{{ wich.make }}</h3>
{% endfor %}
Кроме того, я бы рекомендовал использовать ImageField вместо CharField
для хранения вашего изображения.Каждое изображение, хранящееся в ImageField
(которое наследует все методы и атрибуты из FileField), имеет атрибут url , который подходит для атрибута src
тега img
, например.<img src="{{ dream.imagem.url}}">
.