Django şablonları ve değişken nitelikler

oy
32

Google App Engine ve Django şablonları kullanıyorum.
Ben nesneler gibi görünmelidir görüntülemek istediğiniz bir tablo var:

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

Django şablon:

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

Şimdi Django Documention bir gördüğünde belirtiyor . değişkenlerde
İstediğim tam olarak ne ama gerçekleşmesi görünmüyor hangi Sözlük arama bunlardan biri veri elde etmek üzere birkaç şey çalışır ...

Oluştur 30/08/2008 saat 14:20
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
9

Ben çalışmıyor parçası olduğunu varsayıyorum ` user`.`item `.

Django bir sözlük arama çalışıyorum, ama dize kullanacak olan "item"ve olmayan değeri itemdöngü değişkeni. O çözüldüğünde Django aynı şeyi yaptı ` user`.`name `etmek nameoznıtelığı useryerine adında bir değişken için seyir yerine, nesne name.

Ben size şablonuna işlemek önce size görünümünde bazı verileri preprocessing yapmak gerekir düşünüyorum.

Cevap 30/08/2008 saat 15:16
kaynak kullanıcı

oy
0

değil bu olmalıdır:

` user`.`item `

Bu olabilir mi?

` item `

Bu döngü içinde bağlamda Kullanıcı nesnesi .... var?

Cevap 31/08/2008 saat 23:29
kaynak kullanıcı

oy
32

Ben Onun değil güzel şekilde değişkenleri de almak için bir "güzel" / "daha iyi" bir çözüm buldum, ama işe yarıyor.

Bir parametre olarak dict anahtarını alır django içine özel bir filtre yüklemek

Bunu ana dizinine bir dosya eklemeniz gerekir google app-motoru çalışır hale getirmek için, ben mayın denilen django_hack.py kod bu parça içeren

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)

Şimdi bu dosyayı sahip olduğunu, yapmamız gereken tüm uygulama-motor kullanmak söylemek ... Yaptığımız ana dosyaya bu küçük satır ekleyerek

webapp.template.register_template_library('django_hack')

ve şablon görünümünde olağan kodu yerine bu şablonu eklemek

{{ user|hash:item }}

Ve onun) = mükemmel çalışması gerekir

Cevap 08/09/2008 saat 20:01
kaynak kullanıcı

oy
3

@Dave Webb (i henüz yorum yapmak için yeterince yüksek puan edilmemiştir)

nokta aramaları böyle özetlenebilir: şablon sistemi değişken ada bir nokta karşılaştığında, bu sırayla, aşağıdaki aramaları çalışır:

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

Sistem çalışır İlk arama türünü kullanır. Bu kısa devre mantığı bu.

Cevap 14/08/2009 saat 16:45
kaynak kullanıcı

oy
2

Django şablonları kullanarak Google App Engine üzerinde user.items bir k için değiştirilmesi, v gibi burada user = { 'a': 1, 'b', 2, 'c', 3}

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

1
b2
C3

her sözlük madde için çifti = (anahtar, değer).

Cevap 27/06/2010 saat 01:34
kaynak kullanıcı

oy
8

Ya da bunun gibi tempaltes öznitelikleri çözmek için kullanılan varsayılan django sistemini kullanabilirsiniz:

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

Bu sadece çalışır

Şablonunuzdaki:

{{ user|hash:item }}
Cevap 12/08/2010 saat 10:36
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more