【问题标题】:django last tag object is not subscriptabledjango 最后一个标签对象不可下标
【发布时间】:2019-05-07 17:20:09
【问题描述】:

我很抱歉问但是...

我一直在尝试使用我的 Django 框架在我的 HTML 中使用这个“最后一个”标签,以显示我的数据库中的最后一个对象以显示在我的 html 上;这里文档:https://docs.djangoproject.com/en/2.1/ref/templates/builtins/

现在问题出在我在代码上使用“最后一个”标签时;

<div class = "float-right  my-4 chartjs-render-monitor" id="chartContainerPH" style="width: 49%; height: 400px;display: inline-block; background-color:#FDFDFD;">
<center>
    <a class="title-link" href="{%url 'ph' %}">PH:</a>
    <p> {% for tank_system in tank %}{{tank_system.PH|last}}, {%endfor%}</p>
    </center>

</div>

并得到这个错误;

TypeError at /
'decimal.Decimal' object is not subscriptable
Request Method: GET
Request URL:    http://127.0.0.1:8000/
Django Version: 2.1.3
Exception Type: TypeError
Exception Value:    
'decimal.Decimal' object is not subscriptable
Exception Location: C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\template\defaultfilters.py in last, line 540
Python Executable:  C:\Users\user\AppData\Local\Programs\Python\Python37-32\python.exe
Python Version: 3.7.1
Python Path:    
['C:\\Users\\user\\Desktop\\FrounterWeb- postgreDB',
 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python37-32\\python37.zip',
 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python37-32\\DLLs',
 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python37-32\\lib',
 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python37-32',
 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages']
Server time:    Thu, 6 Dec 2018 11:12:47 +0800

我不清楚这个错误,但即使在这里阅读后: In Python, what does it mean if an object is subscriptable or not?

这是我的模型代码;

from django.db import models
from django.utils import timezone
# having errors KeyError: "'__name__' not in globals"

class tank_system(models.Model):
    PH = models.DecimalField(max_digits=3, decimal_places=1)
    EC = models.DecimalField(max_digits=3, decimal_places=1)
    WaterLevel = models.IntegerField(default=100)
    TempWater = models.IntegerField(default=0)
    TempRoom = models.IntegerField(default=0)
    datetime = models.DateTimeField(default=timezone.now())



    def get_last(self):
        try:
            print(self)
            return self.set.all().order_by('-date')[0]
        except IndexError:
            pass

这里是我的视图代码;

from django.shortcuts import render
from django.views.generic import TemplateView
from zigview.models import tank_system

from django.contrib.auth.decorators import login_required
import logging
logger = logging.getLogger(__name__)
from django.core.mail import send_mail



try:
    @login_required(login_url='/accounts/login/')
    def index(request): #gose to main dashboard page
        #tank = tank_system.objects.all()
        tank = tank_system.objects.extra(select={'is_recent':"datetime>'2006-01-01'"})
        return render(request,'FrounterWeb/extends/includes.html',{'tank':tank})
except:
    logger.error('index page request failed/errors')

不好意思问了

【问题讨论】:

  • 不清楚您要在模板中做什么。你有一个tanks 的列表。并尝试将last 过滤器应用于decimal 值,例如99.99。最后一个过滤器在这种情况下不起作用,它通常应用于查询集或列表。请澄清一下,您是否只想为最后一个tank_system 显示PH 或...?
  • 我正在尝试显示列表中的最后一个元素,并且我需要能够准确地显示多个列表

标签: html django django-template-filters


【解决方案1】:

您可以使用forloop.last 测试for 循环是否引用了最后一项,然后在其上查找PH 属性:

<center>
    <a class="title-link" href="{%url 'ph' %}">PH:</a>
    <p> 
       {% for tank_system in tank %}
           {% if forloop.last %}
               {{ tank_system.PH }}, 
           {% endif %}
       {% endfor %}
    </p>
</center>

似乎尝试在tanks 的查询集上使用Django 的last 模板标签会出现“不支持负索引”错误。

【讨论】:

  • 没用,切换到这个错误; AssertionError at / Negative indexing 不受支持。我猜这些错误意味着查询集中有一个负数。还是“最后一个”需要否定?
  • @RookiesDJ 原来last 模板标签会给出“不支持负索引”错误。我已经用替代解决方案更新了答案。
  • 谢谢你会keeling,它工作。有什么办法可以报答你的帮助。你的人生诀窍。
  • 还是有点不明白。工作代码如何有源代码我可以阅读表格?非常感谢您的帮助。我怎么可能还你
  • @RookiesDJ 很高兴为您提供帮助。我不完全确定您所说的“我可以从中读取工作代码的源代码”是什么意思,但是您可以在有关 Django 的forloop.last 的文档中找到更多信息。如果现在一切正常,也许您可​​以接受答案?谢谢!
猜你喜欢
  • 2020-11-26
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多