【问题标题】:Django for loop in template won't loop through the elements it's like one big string模板中的 Django for 循环不会遍历元素,就像一个大字符串
【发布时间】:2019-04-22 15:01:13
【问题描述】:

我正在尝试做一个简单的循环,但在 Django 中我无法正确输出。

它像一个大字符串一样打印所有内容。

在 python 中,它很好地循环,它是一个有效的列表,创建了一个输入到 postgres 数据库中。

这是我的views.py中的函数

def pages(request, id):


   obj = rtves_programas.objects.get(id=id)

   context = {'title': obj.title,
              'show_date': obj.show_date,
              'script' : obj.script,
              'script_eng': obj.script_eng,
              'description': obj.description,
              'description_eng': obj.description_eng,
              'show_id':obj.show_id,
              'url': obj.url,
               }


   return render(request, 'rtves/pages.html', context)

这个元素是一个列表→'script_eng': obj.script_eng,,我想打印出列表中的元素。

这是我在模板上的代码。

{% if script %}
     {% for sentence in script %}
            {{ sentence }}
     {% endfor %}              

      {% else %}
          <p>Nothing here</p>

{% endif %}

但它打印出列表中的所有内容而不是列表的元素,它看起来像这样

如果我只是将它添加到模板中{{ script }}

类似于循环,但没有空格

这是模型定义

class rtves_programas(models.Model):
title = models.CharField(unique=True, max_length=250)
script = ArrayField(models.CharField(max_length=8000))
created_on = models.DateTimeField()
show_date = models.CharField(max_length=300, blank=True, null=True)
script_eng = models.CharField(max_length=8000, blank=True, null=True)
description = models.CharField(max_length=2000, blank=True, null=True)
description_eng = models.CharField(max_length=2000, blank=True, null=True)
url = models.CharField(max_length=200, blank=True, null=True)
show_id = models.CharField(max_length=200, blank=True, null=True)

【问题讨论】:

  • 为什么你认为它是一个列表?显示 rtves_programas 的定义。
  • 您的script 是,如果我理解正确的话,是一个string,所以如果您对其进行迭代,那么您将获得各个字符。您可以使用'script' : obj.script.splitlines() 生成行列表。但这通常不会对格式化产生太大影响。
  • 当我打印它作为列表返回的元素类型时。在 postgres 数据库中,他们用大括号而不是方括号处理数组,我可以在 python 中很好地循环它,所以它是一个有效的列表。
  • 当我迭代它时,它只是打印它在数据库中的外观以这个 {"
  • 您是否将此脚本数据作为 json 字符串存储在数据库中?

标签: django django-templates django-views


【解决方案1】:

好的,在查看了我决定重新创建它们的模型后,我从旧数据库中继承了这些表并

class programas(models.Model):
title = models.CharField(unique=True, max_length=250)
script = ArrayField(models.CharField(max_length=8000, blank=True))
created_on = models.DateTimeField()
show_date = models.CharField(max_length=300, blank=True, null=True)
script_eng = ArrayField(models.CharField(max_length=8000, blank=True))
description = models.CharField(max_length=2000, blank=True, null=True)
description_eng = models.CharField(max_length=2000, blank=True, null=True)
url = models.CharField(max_length=200, blank=True, null=True)
show_id = models.IntegerField(primary_key=True)
id = models.IntegerField(default=1)

然后模型不会在 postgres 数据库中更新,所以我清除了迁移,所以当迁移不起作用时

我运行了这段代码

SELECT * FROM "public"."django_migrations";
DELETE FROM "public"."django_migrations" WHERE "id"=replace with your Id;

所以现在我可以循环播放,但我还需要处理其他一些事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多