我在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'创建变量,但是什么也没有得到。再次感谢您的时间。
2条答案
按热度按时间vc9ivgsu1#
您的解决方案几乎是正确的,您只是误用了模板中的对象。如果您将一个对象传递给模板,则可以使用
.
表示法访问其属性。我以某种方式更改了您的detail
视图,使变量在模板中访问时更有意义。现在可以使用
{{ dream.titulo }}
和{{ dream.imagem }}
访问标题和图像。要访问被引用的
Wich
对象,Django会自动创建一个反向关系,方法是在被引用的模型中添加一个属性<model>_set
。这里是dream.wich_set
。这是RelatedManager的一个示例,提供了.filter()
,.all()
,...等方法来从数据库中获取对象。这种反向关系是一对多关系,这就是为什么我们会得到多个结果,并且必须使用for循环在模板中迭代它们
另外,我建议使用ImageField而不是
CharField
来存储图像。每个存储在ImageField
(继承了FileField的所有方法和属性)中的图像都有一个url属性,它适合于img
标记的src
属性,例如<img src="{{ dream.imagem.url}}">
。z4iuyo4d2#
首先我会建议使用get_object_or_404()而不是try,除了。现在让我来谈重点。如果你想访问模板中的任何变量,你应该并且必须通过上下文发送它。你是以
titulo
变量的形式在上下文中发送dream对象,所以要访问图像字段,你必须使用代替
如果你想在模板中使用
wich
,你必须确定你想要哪个wich
,并通过上下文从视图中发送它,或者必须使用titulo.wich_set.all
访问所有与dreams对象(titulo)相关的wich
,titulo.wich_set.all
将返回所有与dreams对象(tutilo)相关的wich,你可以循环通过它。