Domanda

Sto cercando di creare un modello che metterà gli elementi in una tabella.

Controller:

items = Item.all().order('name').fetch(10)

    template_values = {'items': items,
                       'headers': ['Name', 'Price', 'Quantity']}
    render('Views/table.html', self, template_values)

Template:

<table>
    <tr>
    {% for header in headers %}
        <th>{{header}}</th>
    {% endfor %}
    </tr>
    {% for item in items %}
        <tr><td><a href="detail/{{item.CSIN}}">{{item.name}}</a></td><td>{{item.CSIN}}</td></tr>
    {% endfor %}
</table>

In questo momento, il modello è difficile codificato per cercare determinati attributi di item. Voglio cambiare questo in modo che entrambi gli sguardi per gli attributi con i nomi che sono in headers, o in modo che appaia per i primi attributi n, dove n è la lunghezza del headers.

Come posso fare questo?

È stato utile?

Soluzione

Si potrebbe modificare la vista di fare:

items = Item.all().order('name').fetch(10)
headers = ['Name', 'Price', 'Quantity']
viewitems = [[getattr(x, h) for h in headers] for x in items]

template_values = {'items': viewitems,
                   'headers': headers}
render('Views/table.html', self, template_values)

così tutto il modello deve fare è un ciclo su ogni "voce" (che sarà solo un elenco dei valori per mostrare corrispondenti alle intestazioni. In sostanza, questo sarebbe spostare la logica (di decidere cosa mostrare) dal modello (o addirittura dividere un po 'ciascuno in template e vista) interamente al codice Python nella vista, semplificando il modello e rendendolo più generale, come si desidera.

Altri suggerimenti

Non sono sicuro se c'è un tag template / filtro esistente che porterà a compimento ciò che si desidera. Si potrebbe guardare a scrivere un tag modello personalizzato o un filtro che accetta la lista degli articoli e l'intestazione corrente e restituisce il valore dopo il look-up. Dai un'occhiata alla http://docs.djangoproject.com/en / dev / howto / custom-template-tag / .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top