Frage

Ich verwende Google App Engine und Django-Vorlagen.
Ich habe eine Tabelle, die ich möchte, um die Objekte anzuzeigen, die folgendermaßen Aussehen:

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

Die Django-Vorlage ist:

<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>

Nun den Django-Dokumentation besagt, dass, wenn es sieht . in Variablen
Es wird versucht, mehrere Dinge, um die Daten zu erhalten, von denen Wörterbuchs, das ist genau das, was ich will, aber scheint nicht zu passieren...

War es hilfreich?

Lösung

Ich fand ein "schöner"/"bessere" Lösung für das Variablen innerhalb Ist es nicht der schönste Weg, aber es funktioniert.

Sie installieren einen benutzerdefinierten filter in django, die erhält die Schlüssel von Ihr dict als parameter

Zu machen es Arbeit, die in der google-app-engine, die Sie brauchen, um add a file to your main directory, Ich rief mir django_hack.py was enthält dieses kleine Stück code

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)

Nun, wir haben diese Datei, alles, was wir tun müssen ist, sagen die app-engine zu verwenden, es...wir tun, dass durch das hinzufügen dieser kleinen Zeile Ihrer Hauptdatei

webapp.template.register_template_library('django_hack')

und in der Vorlage anzeigen, hinzufügen dieser Vorlage anstelle der üblichen code

{{ user|hash:item }}

Und Ihre sollte perfekt funktionieren =)

Andere Tipps

Ich gehe davon aus, dass der Teil der nicht funktioniert, ist {{ user.item }}.

Django versucht, mit Hilfe eines Wörterbuchs, aber mit dem string "item" und nicht der Wert der item loop variable.Django hat die gleiche Sache, wenn es gelöst {{ user.name }} der name Attribut des user Objekt, sondern als die Suche nach einer variable genannt name.

Ich denke, Sie müssen zu tun einige Vorverarbeitung der Daten in Ihrem Blick, bevor Sie machen es in Ihrer Vorlage.

Oder verwenden Sie die Standard-django-system, die ist verwendet zu beheben die Attribute in tempaltes wie diese :

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

, Das einfach nur funktioniert

in Ihrer Vorlage :

{{ user|hash:item }}

@Dave Webb (habe ich noch nicht bewertet, hoch genug, um Kommentar noch)

Die dot-lookups können wie folgt zusammenfassen:wenn das template-system auf einen Punkt im Namen einer Variablen, versucht es die folgenden lookups in dieser Reihenfolge:

* 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])

Das system verwendet die erste lookup-Typ, der funktioniert.Es ist Kurzschluss-Logik.

Als Ersatz für k,v in user.Artikel, die auf Google App Engine mithilfe von django-Vorlagen, in denen user = {'a':1, 'b', 2, 'c', 3}

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

1
b 2
c 3

pair = (Schlüssel, Wert) für jedes Wörterbuch item.

sollte dies nicht:

{{ user.item }}

dies sein?

{{ item }}

es ist keine Benutzer-Objekt im Kontext, innerhalb dieser Schleife....?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top