【问题标题】:Django 2.1 - can't link my models variables in html fileDjango 2.1 - 无法在 html 文件中链接我的模型变量
【发布时间】:2019-03-25 06:08:42
【问题描述】:

各位,首先感谢您的宝贵时间。 我在 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' in .我试图在“imagem”和“make”的视图中创建变量,但一无所获。 再次感谢您的宝贵时间。

【问题讨论】:

  • 嗯,可以有零个、一个或多个 Wich 对象,而不仅仅是一个。所以你的模板对我来说没有多大意义。
  • 您没有在上下文中提供dreamswich
  • 是的,但他们应该为 de id 链接我该怎么做?我尝试在视图中添加 make = wich.make,然后在上下文中添加 {'make':make} 但仍然没有

标签: python html django templates django-templates


【解决方案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 通过将属性 &lt;model&gt;_set 添加到引用的模型来自动创建 reverse relation。在你的情况下dream.wich_set。这是RelatedManager 的一个实例,并提供.filter().all() 等方法,用于从数据库中获取对象。

这种反向关系是一对多关系。这就是为什么我们得到多个结果并且必须使用for-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 属性,该属性适用于img 标记的src 属性,例如。 &lt;img src="{{ dream.imagem.url}}"&gt;.

【讨论】:

  • 非常感谢你为我解释了这个世界,我可以加你吗?
  • 我怎么给你一枚你应得的金牌
【解决方案2】:

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

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

而不是

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

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

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 2011-05-14
    • 2011-07-25
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2019-04-04
    相关资源
    最近更新 更多