Vra

Ek gebruik Google App Engine en Django templates.
Ek het 'n tafel wat ek wil hê dat die voorwerpe vertoon kyk iets soos:

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

Die Django sjabloon is:

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

Nou die Django dokumentasie en bepaal dat wanneer dit sien 'n . in veranderlikes
Dit probeer 'n paar dinge om die data, waarvan een is woordeboek Soek dit is presies wat ek wil, maar lyk nie te gebeur nie kry ...

Was dit nuttig?

Oplossing

Ek het 'n "mooier" / "beter" oplossing vir die kry van veranderlikes binne Dit is nie die mooiste manier, maar dit werk.

Jy installeer 'n persoonlike filter in Django wat die sleutel van jou dict kry as 'n parameter

Om dit te laat werk in Google app-enjin wat jy nodig het om 'n lêer te voeg tot jou hoof directory, Ek het myne django_hack.py wat hierdie stukkie kode bevat

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)

Noudat ons hierdie lêer, al wat ons hoef te doen, is vertel die jeug-enjin om dit te gebruik ... ons dit doen deur die byvoeging van hierdie klein lyn om jou hoof lêer

webapp.template.register_template_library('django_hack')

en in jou sjabloon oog voeg hierdie sjabloon in plaas van die gewone kode

{{ user|hash:item }}

En sy moet perfek werk =)

Ander wenke

Ek neem aan dat die deel van die werk nie is {{ user.item }}.

Django sal probeer om 'n woordeboek Soek, maar met behulp van die string "item" en nie die waarde van die item lus veranderlike. Django het dieselfde ding wanneer dit opgelos {{ user.name }} om die name kenmerk van die user voorwerp, eerder as op soek na 'n veranderlike genoem name.

Ek dink jy sal nodig hê om 'n paar preprocessing van die data in jou oog voor jy dit maak in jou sjabloon.

Of jy kan die standaard Django stelsel wat gebruik word om eienskappe in tempaltes soos hierdie op te los gebruik:

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

Dit net werk

in jou sjabloon:

{{ user|hash:item }}

@Dave Webb (i het nie gegradeer hoog genoeg nog nie kommentaar lewer)

Die dot soektogte kan opgesom word soos volg: wanneer die sjabloon stelsel ontmoetings 'n dot in 'n veranderlike naam, dit probeer die volgende soektogte, in hierdie volgorde:

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

Die stelsel maak gebruik van die eerste lookup tipe wat werk. Dit is 'n kortsluiting logika.

As 'n plaasvervanger vir k, v in user.items op Google App Engine behulp van Django templates waar gebruikers = { 'n ': 1,' b ', 2,' c ', 3}

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

'n 1
b 2
c 3

pair = (sleutel, waarde) vir elke woordeboek item.

moet nie hierdie:

{{ user.item }}

wees nie?

{{ item }}

Daar is geen gebruiker voorwerp in die konteks dat lus ....?

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top