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

时间:2018-10-20 16:31:36

标签: python html django templates django-templates

伙计们,首先感谢您的宝贵时间。 即时通讯在django 2.1中设计模板文件时遇到一些问题 在我的应用程序的index.html上,我可以进入详细信息页面,尽管当我想在html文件中设计我的详细信息页面时,我放置了引用,但浏览器却没有给我任何帮助。 我的模型         从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

MY VIEWS.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 :(得分:1)

您的解决方案几乎是正确的,您只是滥用了模板中的对象。如果将对象传递给模板,则可以使用.表示法访问其属性。我以某种方式更改了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添加到引用的模型来自动创建reverse relation。就您而言,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属性,该属性适用于src标签的img属性,例如。 <img src="{{ dream.imagem.url}}">

答案 1 :(得分:1)

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

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

代替

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

除了要在模板中使用wich之外,还必须确保要获取哪个wich并通过上下文从上下文发送它,或者必须访问所有与wich相关的内容使用titulo.wich_set.all返回到梦境对象(titulo),这将返回与梦境对象(tutilo)有关的所有内容,并且您可以循环浏览它。