Django我可以在html中显示一个值而不显示for循环吗



我想在html中显示视图中的数据。这是views.py

views.py

def addDeviceForm(request):
key=request.GET['key']
device=Device.objects.filter(key=key)
data = {'device':device}
return render(request,'add_form.html', data)

我试图在html文件中显示一个数据,但它不是显示值。

<b>{{ device.key }}</b>

如果我像这样用for显示数据,它没有问题。

{% for device in device %}
<b>{{ device.key }}</b>
{% endfor %}

我这样编辑视图.py。

key="001"
device=Device.objects.filter(key=key)
data = {'device':device,'key':key }
return render(request,'add_form.html', data)

并像这样用html显示。

{{ key.key }}

它仍然没有显示出价值。

我可以在没有for循环的情况下在html中显示一个值吗?

在模板中

# https://docs.djangoproject.com/en/4.0/ref/templates/builtins/#first
<b>{{ data.first.key }}</b>

如果你想做一个过滤器,返回你的对象的第n个项目,那么:

  • 在应用程序中创建目录templatetags,在该目录中创建文件__init__.py和任意名称的文件filters.py

In filters.py

from django import template
register = template.Library()

@register.filter
def get_item(myList, index=0):
"""
Django template filter to get nth item of list
"""
if index < 0:
return myList[0]
else:
return myList[index]

在模板中

滤波器get_item可用作:filterstemplatetags中文件的名称

{% load filters %}
<!-- n will be item 0, 1, 2, ... -->
<b>{{ data|get_item:"n" }}
def add_device_form(request):
key=request.GET['key'] # you should probably use a FORM here 
# device=Device.objects.filter(key=key) you don't need a queryset
# and querysets are plural, they are a set of the rows, not a single row
device = get_object_or_404(Device, key=key) # Throws 404 if obj doesn't exist
context = {'device':device} 
return render(request,'add_form.html', context)

模型类的过滤方法将始终向您返回查询集,而不是对象。如果您想使用过滤方法返回对象,则应使用以下方法:

device=Device.objects.filter(key=key).last()

device=Device.objects.filter(key=key).first()

通过这种方式,您将获得查询集的最后一个或第一个对象,而不是它本身。

是的,您可以在html中显示一个值,您必须使用get((django-doc或更好的get_object_or_404((django-doc

views.py

from django.shortcuts import get_object_or_404, render

def addDeviceForm(request):
key=request.GET['key']
device=get_object_or_404(Device,any_key_name=key)
data = {'device':device}
return render(request,'add_form.html', data)

然后,在template文件中,您将获得一个对象device,您可以在其中访问它的所有属性。

模板文件

<b>{{ device.any_key_name }}</b>

Note:filter((djano doc总是返回新的QuerySet,其中包含与文档中所述的给定查找参数匹配的对象。所以,只将它与looping一起使用,因为您不知道数据库是否有1条或更多条记录。

最新更新