Django 2.1 - не могу связать переменные моих моделей в HTML-файл - PullRequest
0 голосов
/ 20 октября 2018

ребята, прежде всего спасибо за ваше время.У меня возникли некоторые проблемы при разработке моих файлов шаблонов в django 2.1 в index.html моего приложения, я могу попасть на страницу сведений, хотя, когда я хочу создать свою страницу сведений в html-файле, я помещаю ссылки, но браузер дает мненичего такого.МОИ МОДЕЛИ.PY из django.db импортные модели

class Dreams (models.Model):
    titulo = models.CharField(max_length=100)
    objetivo = models.CharField(max_length=100)
    imagem = models.CharField(max_length=100)

    def __str__(self):
        return self.titulo + ' - ' + self.objetivo


class Wich (models.Model):
    lets = models.ForeignKey(Dreams, on_delete=models.CASCADE)
    make = models.CharField(max_length=100)
    it = models.CharField(max_length=100)

    def __str__(self):
        return self.make

МОИ ПРОСМОТРА.PY

from django.http import HttpResponse, Http404
from .models import Dreams, Wich
from django.template import loader
from django.shortcuts import render


def index(request):
    all_dreams = Dreams.objects.all()
    contexto = {'all_dreams': all_dreams}
    return render(request, 'index.html', contexto)


def detail(request, Dreams_id):
    try:
        titulo = Dreams.objects.get(pk=Dreams_id)
        contexto = {'titulo': titulo}
    except Dreams.DoesNotExist:
        raise Http404("sem sonhos")
    return render(request, 'detail.html', contexto)

МОЙ detail.html ФАЙЛ

<img src = {{ dreams.imagem }}>
<h2>{{ titulo }}</h2>
<h3>{{ wich.make }}</h3>

но единственноечто я получаю это 'Titulo' в.я пытался создать переменные в представлениях для 'imagem' и 'make' и ничего не получил.еще раз спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Сначала я предложу использовать get_object_or_404 () вместо try, кроме.Теперь позвольте мне перейти к главному.Если вы хотите получить доступ к любой переменной в шаблоне, вы должны и должны отправить ее через context .Вы отправляете объект мечты в виде переменной titulo в контексте, поэтому для доступа к полю изображения вы должны использовать

<img src = {{ titulo.imagem }}>

вместо

<img src = {{ dreams.imagem }}>

, а также если вы хотитечтобы использовать wich в шаблоне, вы должны убедиться, что вы хотите wich и отправить его через контекст из представления или получить доступ ко всем wich, связанным с объектом сновидений (titulo), используя titulo.wich_set.all, который вернет васвсе, что связано с объектом сна (тутило), и вы можете пройти через него.

0 голосов
/ 20 октября 2018

Ваше решение почти правильное, вы просто неправильно использовали объекты в своем шаблоне.Если вы передаете объект в свой шаблон, вы можете получить доступ к его атрибутам, используя нотацию ..Я изменил ваш 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}}">.

...