2017-07-01 187 views
1

這裏是我的問題: 我想打印一個表,其中包含了各個領域Django的 - 模板包含模型的「表」

這裏的每一個對象模板是我的解決方案:

views.py

def start(request): 
    all_rows = Person.objects.all() 
    all_fields_names = Person._meta.get_fields() 
    content = { 'all_rows': all_rows, 
       'all_fields_names': all_fields_names } 

    return render(request, 'start.html', content) 

的start.html

<table class="table table-striped table-hover table-responsive"> 
<thead> 
    {% for names in all_fields_names %}<th>{{ names.name |title }}</th>{% endfor %} 
</thead> 
<tbody> 
    {% for row in all_rows %} 
    <tr> 
     <td>{{ row.name }}</td> 
     <td>{{ row.yabadiba }}</td> 
     <td>{{ row.value1 }}</td> 
     <td>{{ row.value2 }}</td> 
    </tr> 
    {% endfor %} 
</tbody> 
</table> 

一切完美的作品。問題是,當我不確切知道課堂上有多少場時。其次,我的解決方案打破了DRY規則。我已經試過:

GETATTR(行,名稱)

和嵌套循環,沒有成功。 有沒有簡單的解決辦法?

此外:如何打印爲每類這樣的說法?

回答

1

你需要的是你的viewsvalues_list查詢,當遍歷它返回的元組。每個元組包含來自相應的字段或表達式傳遞到values_list()值:

all_fields_names = Mileage._meta.get_fields() 
value_fields = [f.name for f in all_fields_names] 
all_rows = Mileage.objects.values_list(*(value_fields)) #pass fields to value_list 

那麼你可以使用嵌套的for循環在你templates

{% for row in all_rows %} 
    <tr>{% for value in row %}<td>{{ value }}</td>{% endfor %}</tr> 
{% endfor %}