Domanda

Utilizzo i modelli Google App Engine e Django.
Ho una tabella in cui voglio visualizzare gli oggetti in modo simile a:

Object Result:
    Items = [item1,item2]
    Users = [{name='username',item1=3,item2=4},..]

Il modello Django è:

<table>
<tr align="center">
    <th>user</th>
    {% for item in result.items %}
        <th>{{item}}</th>
    {% endfor %}
</tr>

{% for user in result.users %}
    <tr align="center"> 
        <td>{{user.name}}</td>
        {% for item in result.items %}
            <td>{{ user.item }}</td>
        {% endfor %}
    </tr>
{% endfor %}
</table>

Ora il Documentazione Django afferma che quando vede a . nelle variabili
Prova diverse cose per ottenere i dati, una delle quali è la ricerca nel dizionario che è esattamente ciò che voglio ma non sembra accadere...

È stato utile?

Soluzione

Ho trovato una soluzione "più bella"/"migliore" per ottenere variabili all'interno non è il modo più bello, ma funziona.

Installi un filtro personalizzato in django che ottiene la chiave del tuo dict come parametro

Per farlo funzionare in Google App-Engine è necessario aggiungere un file alla tua directory principale, ho chiamato il mio django_hack.py che contiene questo piccolo pezzo di codice

from google.appengine.ext import webapp

register = webapp.template.create_template_register()

def hash(h,key):
    if key in h:
        return h[key]
    else:
        return None

register.filter(hash)

Ora che abbiamo questo file, tutto ciò che dobbiamo fare è dire all'app-engine di usarlo...lo facciamo aggiungendo questa piccola riga al tuo file principale

webapp.template.register_template_library('django_hack')

e nella visualizzazione del modello aggiungi questo modello invece del solito codice

{{ user|hash:item }}

E dovrebbe funzionare perfettamente =)

Altri suggerimenti

Presumo che la parte che non funziona sia {{ user.item }}.

Django proverà una ricerca nel dizionario, ma utilizzando la stringa "item" e non il valore di item variabile del ciclo.Django ha fatto la stessa cosa quando il problema si è risolto {{ user.name }} al name attributo del user oggetto, invece di cercare una variabile chiamata name.

Penso che dovrai eseguire una preelaborazione dei dati nella tua visualizzazione prima di renderli nel tuo modello.

Oppure puoi utilizzare il sistema Django predefinito che viene utilizzato per risolvere gli attributi nei modelli come questo:

from django.template import Variable, VariableDoesNotExist
@register.filter
def hash(object, attr):
    pseudo_context = { 'object' : object }
    try:
        value = Variable('object.%s' % attr).resolve(pseudo_context)
    except VariableDoesNotExist:
        value = None
return value

Funziona e basta

nel tuo modello:

{{ user|hash:item }}

@Dave Webb (non ho ancora ricevuto una valutazione abbastanza alta per commentare)

Le ricerche dei punti possono essere riassunte in questo modo:quando il sistema del modello incontra un punto in un nome di variabile, tenta le seguenti ricerche, in questo ordine:

* Dictionary lookup (e.e., foo["bar"])
* Attribute lookup (e.g., foo.bar)
* Method call (e.g., foo.bar())
* List-index lookup (e.g., foo[bar])

Il sistema utilizza il primo tipo di ricerca che funziona.È la logica del cortocircuito.

In sostituzione di k,v in user.items su Google App Engine utilizzando i modelli Django dove user = {'a':1, 'b', 2, 'c', 3}

{% for pair in user.items %}
   {% for keyval in pair %} {{ keyval }}{% endfor %}<br>
{% endfor %}

un 1
b2
c3

coppia = (chiave, valore) per ogni elemento del dizionario.

non dovrebbe essere questo:

{{ user.item }}

essere questo?

{{ item }}

non esiste alcun oggetto utente nel contesto all'interno di quel ciclo....?

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