【问题标题】:Print key/value object in a template在模板中打印键/值对象
【发布时间】:2011-05-26 09:43:02
【问题描述】:

我正在使用 django(v.1.2) 通用视图“list_detail”来打印存储在数据库中的一些对象(模型文章)。

在 urls.py 我添加了以下行

urlpatterns += patterns('django.views.generic.list_detail',
url(r'^article/(?P<slug>[\-\d\w]+)/$', 'object_detail', {'slug_field': 'title_slug', 'queryset': Article.objects.filter(is_public=True)}, name='article'),

)

在相应的模板 (article_detail.html) 中,我想打印迭代所有字段的文章。其实我写的是:

{% for k,v in object.fields %}
  <p>{{k}}:{{v}}<p>
{% endfor %}

但它不起作用。有什么建议吗?

【问题讨论】:

  • 答案是here
  • object.fields 中的对象是什么?
  • @Narendra Kamma "object: 对象。这个变量的名字取决于 template_object_name 参数,默认是 'object'。如果 template_object_name 是 'foo',这个变量的名字就是 foo"。 docs
  • 我明白,您的模板中的对象是什么。您没有向名为“对象”的模板发送任何内容。您正在发送文章的查询集,这将是一个列表。
  • @Narendra Kamma:除了 extra_context 之外,“对象”还被发送到模板的上下文中。您不需要将其发送到模板,因为它位于“object_detail”视图中。但是您可以在 DrTyrsa 之前链接的 django 文档中阅读此内容。

标签: django django-templates django-views


【解决方案1】:

'queryset':Article.objects.filter(is_public=True) 将列表发送到您的模板。 但在模板中,您将其视为 Article 对象。

'article':Article.objects.filter(is_public=True)[0]

然后您可以访问文章的所有项目。但是,我不明白你想用它做什么。 Article.fields 是列表还是字典?

【讨论】:

    【解决方案2】:

    让我们通过一个例子来解决这个问题-

    我有一个模型-

    class item(models.Model):
        item_number = models.AutoField(primary_key=True)
        item_name = models.CharField(max_length=200)
        lifetime_rating = models.DecimalField(max_digits=3,decimal_places=1, default=0)
        current_rating = models.DecimalField(max_digits=3,decimal_places=1, default=0)
        lifefeedbacknum = models.IntegerField(default=0)
        currentfeedbacknum = models.IntegerField(default=0)
    
        def __unicode__(self):
            return self.item_name
    
        def retlifetime_rating(self):
            return self.lifetime_rating
    

    注意方法-retlifetime_rating,它返回对象实例的生命周期值。

    现在我们希望显示所有产品的终身评级

    在views.py-

    def showrating(request):
        itemslist= models.item.objects.all()
        return render(request, 'showrating.html', 'sitems' : itemslist)
    

    showrating.html 文件包含以下代码 sn-p-

    {% for element in sitems %}
            <tr>
                <td>{{ element }}</td>
                <td>{{ element.retlifetime_rating }}</td>
            </tr>
        {% endfor %}
    

    基本上如果你想显示一个对象的不同字段,你需要有一个相应的方法调用来返回那个字段

    当然还有其他方法可以做到这一点,但这很可能是最简单和最容易实现的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 2016-05-13
      • 2013-05-04
      • 1970-01-01
      • 2013-02-07
      相关资源
      最近更新 更多