Soru Django şablonları ve değişken özellikleri


Google App Engine ve Django şablonlarını kullanıyorum.
Nesnelerin nasıl görüneceğini görüntülemek istediğim bir tablom var:

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

Django şablonu:

<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 dökümantasyonu bir gördüğü zaman . değişkenlerde
Verileri elde etmek için birkaç şey deniyor, bunlardan biri tam olarak istediğim, ancak görünmüyorsa sözlük aramasıdır.


32
2017-08-30 13:20


Menşei


Bu zarif bir çözüm: stackoverflow.com/a/8000091/781695 - user


Cevaplar:


İçinde değişkenler almak için "daha güzel" / "daha iyi" bir çözüm buldum Onun en güzel yolu değil, ama işe yarıyor.

Taslağınızın anahtarını parametre olarak alan django'ya özel bir filtre yüklersiniz.

Google uygulama motorunda çalışmasını sağlamak için ana dizininize bir dosya eklemeniz gerekir. Benim aradım django_hack.py Bu küçük kod parçasını 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 dosyaya sahip olduğumuza göre, tek yapmamız gereken uygulama motorunu kullanmasını söylemek ... Bu küçük çizgiyi ana dosyanıza ekleyerek yaparız

webapp.template.register_template_library('django_hack')

ve şablon görünümünüzde her zamanki kod yerine bu şablonu ekleyin

{{ user|hash:item }}

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


32
2017-09-08 19:01



+1 bugün çok yardımcı oldu, teşekkürler :) - kender


Çalışmıyor kısmın olduğunu farz ediyorum. {{ user.item }}.

Django sözlük araması yapmaya çalışıyor ancak dizeyi kullanıyor olacak "item" ve değerinin değil item döngü değişkeni. Django çözüldüğünde aynı şeyi yaptı {{ user.name }} göre name özniteliği user nesne, denilen bir değişken aramak yerine name.

Şablonunuzda oluşturmadan önce, görünümünüzdeki verilerin önişlemesini yapmanız gerektiğini düşünüyorum.


9
2017-08-30 14:16





Ya da tempalitlerdeki ö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

senin şablonunda:

{{ user|hash:item }}

8
2017-08-12 09:36





@Dave Webb (henüz yorum yazamayacak kadar yüksek puan almadım)

Nokta aramaları şu şekilde özetlenebilir: şablon sistemi değişken adında bir noktayla karşılaştığında, şu sırayla aşağıdaki aramaları dener:

* 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ışan ilk arama türünü kullanır. Kısa devre mantığı.


3
2017-08-14 15:45





Kullanıcının = {'a': 1, 'b', 2, 'c', 3} olduğu django şablonlarını kullanarak Google App Engine'deki user.items'deki k, v yerine

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

1
b 2
c 3

Her sözlük öğesi için çift = (anahtar, değer).


2
2018-06-27 00:34





bu olmamalı:

{{ user.item }}

bu olmak mı

{{ item }}

Bu döngü içindeki bağlamda kullanıcı nesnesi yok ....


0
2017-08-31 22:29