伙计们,首先感谢您的宝贵时间。 即时通讯在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”的视图中创建变量,但一无所获。 再次感谢您的宝贵时间。
答案 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)有关的所有内容,并且您可以循环浏览它。