2012-06-03 41 views
1

新手問題: 我有一本字典在views.py如何訪問Django模板中的鍵值?

我的觀點定義的方法與extra_Context渲染:

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> 

回答

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 %} 
+0

謝謝你的回覆。但根據你的回覆,我必須追加的數據,我從數據庫中獲得。請看看更新!部分的問題:) 我剛剛在view.py中發佈了該方法 –

+0

@AmitPal它呈現模板失敗嗎?你可以在剛剛添加的方法下添加錯誤嗎? – dschulz

+0

我還在更新部分添加了我的模板。使用它打印沒有評論td –

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> 
+0

你見過我做過同樣的事嗎? 你有沒有檢查模板部分 –

+0

寫的代碼而你的回答是錯誤的。它只打印註釋鍵的值而不打印用戶鍵的值。請看 –

+0

這個問題,你寫過'我想要這樣:前2秒2'。所以我想,你想在html輸出的同一行上打印'first'和'2'。爲此,我修改的模板代碼... – stalk

1

「在object.items K(K =鍵),V(V =值)」

所有的意思是迭代每個關鍵值對,例如object.items中的name = models.CharField(max_length = 50)。您的視圖返回了object.items的上下文,其中每個項目都是模型實例,並具有一組與其關聯的k,v對。

相關問題