我想在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
可用作:filters
是templatetags
中文件的名称
{% 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条或更多条记录。