我对Django比较新。目前我正在为朋友的狗窝写一个网页。我有一个带有狗列表的base.html。通过点击它们中的任何一个,你可以根据狗的名字转到他们自己的相应网址上的个人资料(带有子模板profile.html)。
我的问题是我无法引用模板中的狗对象。我需要拿出狗的名字,它的描述和图像。
以下是我的文件:
models.py
class dog(models.Model):
name = models.CharField(max_length=30, blank=False, null=True)
main_image = models.ImageField(upload_to='dogs', blank=False, null=True)
description = models.TextField(max_length=500, blank=False, null=True)
slug = AutoSlugField(populate_from='name')
views.py
def home(request):
dog_list = dog.objects.all()
template = 'base_extend.html'
return render(request, template, {'dogs' : dog_list})
def dog_view(request, name):
dog_list = dog.objects.all()
dog_view = get_object_or_404(dog, name=name)
return render(request, 'profile.html', locals())
base.html文件
{% for dog in dogs %}
<a href="{% url 'profile' dog.name %}">
<div class="col-sm-4">
<img class="img-circle img-responsive img-center" src="{{ dog.main_image.url }}" height=400px width=400px alt="">
<h2 align=center>{{ dog.name }}
{% if dog.gender == 'ML' %}
♂
{% else %}
♀
{% endif %}</h2>
<p>{{ dog.description }}</p>
</div></a>
在profile.html中,我需要以下内容:
<img src="{{ dog.main_image.url }}">
<h2>{{ dog.name }}</h2>
<p>{{ dog.description }}</p>
如何引用为其创建当前URL的狗的对象?变量{{name}}仅返回字符串,{{dog_list}}返回所有创建的狗的列表。
{{dog_list.1}}(或任何其他数字)几乎可以满足我的需要,除了我不知道如何获得当前狗的数量。
感谢您阅读这么久的问题。我希望你的回答,因为我在互联网上搜索,无法找到答案(或者我做错了请求)。谢谢。
答案 0 :(得分:0)
您需要像在home
视图中一样填充字典对象,而不是调用locals()。 明确比隐含更好。
def dog_view(request, name):
dog_list = dog.objects.all()
dog_view = get_object_or_404(dog, name=name)
return render(request, 'profile.html', {'dogs': dog_list,
'dog': dog_view}
为了解释实际问题,您在模板中引用了dog.attribute
,但通过调用locals()
,它将dog_view
作为对象引用传递。如果您坚持使用本地人(我不建议这样做),您需要在模板中引用dog_view.attribute
。
答案 1 :(得分:0)
您可以将视图中的狗对象作为上下文变量传递给模板,然后通过执行(在本例中)dog_view.name
来访问狗的属性,如名称,描述等。 ,dog_view.description
,dog_view.main_image.url
。如果你打印出locals()
,你会发现这是你的局部变量+值和args的字典。所以,在这个词典中你有"dog_view": <Dog object>, ...
所以你实际上已经传递了狗实例。
但是,正如您在其他答案中看到的那样,您最好将这些明确地传递给您的模板,我不建议您使用locals()
。