Django 2.1 -无法链接html文件中的模型变量

6ljaweal  于 2022-12-14  发布在  Go
关注(0)|答案(2)|浏览(139)

我在Django 2.1中设计我的模板文件时遇到了一些问题,我可以在应用的index.html中设计我的详细信息页面,尽管当我想在html文件中设计我的详细信息页面时,我把引用放在了浏览器中,但浏览器什么也没有给我。
MY MODELS.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>

但是我得到的唯一的东西是<h2>中的'titulo'。我已经尝试在视图中为'imagem'和'make'创建变量,但是什么也没有得到。再次感谢您的时间。

vc9ivgsu

vc9ivgsu1#

您的解决方案几乎是正确的,您只是误用了模板中的对象。如果您将一个对象传递给模板,则可以使用.表示法访问其属性。我以某种方式更改了您的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(),...等方法来从数据库中获取对象。
这种反向关系是一对多关系,这就是为什么我们会得到多个结果,并且必须使用for循环在模板中迭代它们

<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属性,它适合于img标记的src属性,例如<img src="{{ dream.imagem.url}}">

z4iuyo4d

z4iuyo4d2#

首先我会建议使用get_object_or_404()而不是try,除了。现在让我来谈重点。如果你想访问模板中的任何变量,你应该并且必须通过上下文发送它。你是以titulo变量的形式在上下文中发送dream对象,所以要访问图像字段,你必须使用

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

代替

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

如果你想在模板中使用wich,你必须确定你想要哪个wich,并通过上下文从视图中发送它,或者必须使用titulo.wich_set.all访问所有与dreams对象(titulo)相关的wichtitulo.wich_set.all将返回所有与dreams对象(tutilo)相关的wich,你可以循环通过它。

相关问题