2012-06-03 3 views
1

Новичок Вопрос: У меня есть словарь рендеринга с extra_Context от метода, определенного в views.pyКак получить доступ к значениям для ключа в шаблоне Django?

Мои просмотров:

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

Благодарим вас за ответ. Но данные, которые я должен добавить в соответствии с вашим ответом, я получаю от базы данных. Пожалуйста, взгляните на обновленный! раздел вопроса :) Я только что отправил метод в views.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'. Поэтому я подумал, что вы хотите напечатать 'first' и' 2' в одной строке в html-выходе. Для этого я изменил код шаблона ... – stalk

1

"для к (к = ключ), V (v = значение) в object.items"

Все, что говорят, это перебрать каждую пару значений ключа, например, name = models.CharField (max_length = 50) в object.items. Ваше представление вернуло контекст для object.items, каждый из которых является экземпляром модели и имеет набор связанных с ним пар k, v.

Смежные вопросы