【问题标题】:django for loop in a .html template page (newbie).html 模板页面中的 django for 循环(新手)
【发布时间】:2012-04-26 01:38:56
【问题描述】:

在学习一门新语言/框架时,我真正讨厌的是,当我被困在一个看似容易解决的问题上时,我是多么的无知。

我在 html 页面中有一个 django for 循环,但由于某种原因它无法正常工作。我错过了一些东西,无法自行解决问题,所以我求助于 StackOverflow。

这是我在 models.py 上运行查询的模型:

class RIAchievement(models.Model):
  riAchievementID = models.AutoField(primary_key=True, db_column="RIAchievementID")
  userLanguageVersionID = models.ForeignKey(UserLanguageVersion, db_column="UserLanguageVersionID")
  typeAchievementID = models.ForeignKey(TypeAchievement, db_column="TypeAchievementID")
  riAchievementTypeUserDescription = models.CharField(max_length=255, blank=True, null=True, db_column="RIAchievementTypeUserDescription")
  riAchievementDescription = models.TextField(max_length=2000, db_column="RIAchievementDescription")
  auth_user_id = models.ForeignKey(auth_user, db_column="auth_user_id")
  class Meta:
    db_table="RIAchievement"

这是我的 models.py 文件在我的项目中的位置:GlobalXpy\app_data\models.py

这是我的 views.py 文件中的代码:

from django.shortcuts import render_to_response
from GlobalXpy.app_data.models import RIAchievement

def index(request):
  ri_achievement = RIAchievement.objects.all()
  get_template = loader.get_template('ri_achievement.html')
  return render_to_response(get_template)

这是我的模板文件 (ri_achievement.html) 中的 for 循环:

{% for e in ri_achievement %}
  <td> Preview  Edit  Duplicate  Delete </td>
  <td> FlagPath </td>
  <td> AchievementType / RIAchievementTypeUserDescription </td>
  <td> {{ e.riAchievementDescription }} </td>
{% endfor %}

任何帮助将不胜感激。

【问题讨论】:

  • 请说明它在什么方面不起作用。是不是您导航到该页面,但随后您看到的输出与您预期的不同?
  • for 循环应该显示输出的地方,没有数据显示。没有执行 for 循环。
  • 在 for 循环之前先打印模板中的ri_achievement。检查它是否包含数据?
  • 要打印 ri_achievement,我是否只需写: {{ ri_achievement }} 如果是这样,则打印/不显示任何内容。

标签: django for-loop


【解决方案1】:
from django.shortcuts import render
from GlobalXpy.app_data.models import RIAchievement

def index(request):
  ri_achievement = RIAchievement.objects.all()
  return render(request, 'ri_achievement.html',{'ri_achievement': ri_achievement})

在您的模板中:

{% if ri_achievement %}
   There are {{ ri_achievement|length }} records:
   {% for e in ri_achievement %}
      <td> Preview  Edit  Duplicate  Delete </td>
      <td> FlagPath </td>
      <td> AchievementType / RIAchievementTypeUserDescription </td>
      <td> {{ e.riAchievementDescription }} </td>
   {% endfor %}
{% else %}
   There are no records in the system
{% endif %}

【讨论】:

  • 布尔汉,感谢您的建议。我收到系统中没有记录的消息(即使应该显示 10 条记录)。我应该检查什么以确认代码正确调用了模块/数据库?
  • 如果您收到“系统中没有记录”,那么代码工作正常。启动一个 django shell manage.py shell,然后是 from GlobalXpy.app_data.models import RIAchievement,然后是 RIAchievement.objects.all().count() - 打印什么?
  • 打印 10 - 数据库中的记录数。
  • Burhan,感谢您的解决方案。这并没有立即对我有用。所以我删除了我的项目和数据库并安装了我的 django 项目和数据库/模型文件的全新安装,然后工作。我没有找到导致问题的原因。
【解决方案2】:

你忘记传递变量了。

return render_to_response(get_template, {'ri_achievement': ri_achievement})

【讨论】:

  • 我试过你的建议,但是for循环没有执行(没有数据显示)。
猜你喜欢
  • 1970-01-01
  • 2021-10-17
  • 2012-07-25
  • 1970-01-01
  • 2010-11-09
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多