2011-09-15 6 views
5

ho bisogno di visualizzare diversi modelli citarne & oggetti in un modelloDjango - modello standard di visualizzazione verbose_names e oggetti

Ecco il mio vista

def contents(request): 
    """Lists contents""" 
    objects = [ 
    Model1.objects.all(), 
    Model2.objects.all(), 
    Model3.objects.all(), 
    Model4.objects.all(), 
    ] 
    return render_to_response('content/contents.html', objs 
    , context_instance=RequestContext(request) 
) 

E il mio modello

{% for objs in objects %} 
    <div class="content"> 
    <div class="title">{{ objs._meta.verbose_name }}</div> 
    <ul> 
    {% for obj in objs %} 
     <li>{{ obj }}</li> 
    {% endfor %} 
    </ul> 
    </div> 
{% endfor %} 

Ovviamente objs._meta.verbose_name non funziona

C'è un modo per accedere a questo nome dettagliato senza dover creare una funzione per ciascun modello o assegnare il valore dalla vista per ciascun modello?

risposta

11

Per accedervi nel modello, avrete probabilmente notato che Django non consente di utilizzare prefissi di sottolineatura per accedere agli attributi dai modelli. Così, il modo più semplice per accedere al nome dettagliato per qualsiasi oggetto senza dover creare un metodo di modello su ogni modello sarebbe quello di creare solo un tag template:

@register.simple_tag 
def get_verbose_name(object): 
    return object._meta.verbose_name 

non collegati, ma avete un bug nel tuo modello , nel senso che stai tentando di accedere all'attributo _meta su un queryset anziché su un oggetto. Quindi la riga del titolo dovrebbe essere simile a:

{% with objs|first as obj %} 
    <div class="title">{% get_verbose_name obj %}</div> 
{% endwith %} 
+0

Lavoro. Ho usato '{% get_verbose_name objs.0%}' alla fine (non sono sicuro che funzionerà se non c'è alcun valore). –

+0

Felice di averlo aiutato! – Spike

+9

Forse l'utilizzo di un filtro è più pulito. È quasi la stessa implementazione, ma il metodo di chiamata sembra migliore. Qualcosa come '{{obj | verbose_name}}' o '{{obj.0 | verbose_name}}' –

Problemi correlati