2

新手问题:我有一个字典渲染,使用extra_Contextviews.py中定义的方法

我的看法:

 extra_context = {
    'comment': comment
    }
return direct_to_template(request, 'events/comment_detail.html', extra_context)

如果我打印comment它,它会像这样打印:

[{'comment': u'first', 'user': 2}, {'comment': u'second', 'user': 2}]

我想将此字典传递给我的模板。我尝试使用以下代码:

       <tbody>
            {% for obj in comment %}
                {% for key,val in obj.items %}
             <tr class="{% cycle 'odd' 'even' %}">
                <td> {{val}}</td>
            </tr>
                {% endfor %}
            {% endfor %}
       </tbody>

它打印:

first
2
second
2

我想这样:

first  2
second 2

..等等

我应该添加什么才能像上面一样?

更新!

 def comment_detail(request, object_id):
     comment_obj = EventComment.objects.filter(event = object_id)
     comment = comment_obj.values('comment','user')
     extra_context = {
         'comment': comment
         }
     return direct_to_template(request, 'events/comment_detail.html', extra_context)

comment_detail.html

<form action="" method="POST">
<table>
    <thead>
        <tr><th>{% trans "Comments" %}</th><th>{% trans "Timestamp "%}<th>{% trans "User" %}</th></tr>
    </thead>
    <tbody>
        {% if comments %}
    {% for com in comment %}
                <td> {{com.comment}}</enter code heretd>
                <td> {{com.user}}</td>
    {% endfor %}
    {% else %}
     <td> No comments </td>
     {% endif %}
    </tr>  
    </tbody>
</table>
 </form>
4

3 回答 3

2

你不需要那个嵌套的for迭代k,v。我刚试过这个:

看法:

def testme(request):
   comments = []
   comments.append({'user': 2, 'comment': 'cool story bro'})
   comments.append({'user': 7, 'comment': 'yep. cool story'})

   extra_context = {
      'comments': comments
   }

   return render_to_response('testapp/testme.html', extra_context )

模板:

{% if comments %}
   <b>Comments:</b>
   <ul>
   {% for comment in comments %}
     <li>{{ comment.comment }} (id {{ comment.user }})</li>
   {% endfor %}
   </ul>
{% else %}
   <b>No comments</b>
{% endif %}
于 2012-06-03T15:43:20.890 回答
1

“对于 k(k=key), v(v=value) in object.items”

这就是说遍历每个键值对,例如object.items 中的name = models.CharField(max_length=50)。您的视图返回了 object.items 的上下文,其中每个项目都是一个模型实例,并且有一组与之关联的 k,v 对。

于 2012-06-04T06:01:38.947 回答
0

看起来你的问题只是关于 html 标记。试试这个:

<tbody>
    {% for obj in comment %}
        <tr class="{% cycle 'odd' 'even' %}">
            {% for key,val in obj.items %}          
                <td>{{val}}</td>       
            {% endfor %}
        </tr>
    {% endfor %}
</tbody>

或这个:

<tbody>
    {% for obj in comment %}
        <tr class="{% cycle 'odd' 'even' %}"><td>
            {% for key,val in obj.items %}          
                 {{val}}<span> </span>  
            {% endfor %}
        </td>  </tr>
    {% endfor %}
</tbody>
于 2012-06-03T15:06:14.350 回答