Django şablonu içinde dizine göre referans listesi öğesi?


111

Bu basit olabilir ama etrafa baktım ve bir cevap bulamadım. Bir Django şablonundan bir listedeki tek bir öğeye başvurmanın en iyi yolu nedir?

Başka bir deyişle {{ data[0] }}, şablon dilinin eşdeğerini nasıl yaparım ?

Teşekkürler.

Yanıtlar:


189

Gibi görünüyor {{ data.0 }}. Değişkenler ve aramalara bakın .


47
Can sıkıcı olan şey, içinde bir özellik adı değil, indeks değeri olan bir değişkenin {{ data.foo }}nerede fooolduğunu söyleyemem .
Mike DeSimone

1
Özel bir etiket oluşturmak istiyorsanız, çok daha fazlasını yapabilirsiniz. Burada sadece yerleşik malzemelerle çalışıyoruz.
Mike DeSimone

Bağlantı artık çalışmıyor, şunu deneyin: docs.djangoproject.com/en/1.10/ref/templates/api/…
Speccy

77

Daha iyi bir yol: özel şablon filtresi: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

şablonlarda my_list [x] al gibi:

şablonda

{% load index %}
{{ my_list|index:x }}

templatetags / index.py

from django import template
register = template.Library()

@register.filter
def index(indexable, i):
    return indexable[i]

eğer my_list = [['a','b','c'], ['d','e','f']]kullanabileceğiniz {{ my_list|index:x|index:y }}almak için şablondamy_list[x][y]

"For" ile sorunsuz çalışıyor

{{ my_list|index:forloop.counter0 }}

Test edildi ve iyi çalışıyor ^ _ ^


1
Şablon Etiketleri uygulamasını öğrenmek için en basit açıklamalardan biri!
vanguard69

5
Bu harikaydı! Ancak {{List | index: x}} biçimiyle, normalde nokta kullanacağım değerlere nasıl erişebilirim? {{(List | index: x) .name}} açıkçası çalışmıyor. Teşekkür ederim!
JTFouquier

Tam olarak aradığım şey. Teşekkür ederim!
Grant Bartel

İstediğim değerin indeksinden emin olmadığım bir dizim var{% for id in article_details.heading.contents.article_ids %} {% if id.type == 'DOI' %} {{ article_details.heading.contents.article_ids.forloop.counter0.value }} {% endif %} {% endfor %}
Akin Hwan

Bir listeyle (eşleşmeler) yineliyorum, yineleyerek dizini kullanmak istediğim başka bir listem var (counter0), {{matchTeamEmblems.forloop.counter0.homeTeamID}} 'yi denedim ama çalışmıyor, matchTeamEmblems bir listedir amblemlerim için bir URL (statik ..) oluşturan basit_tag oluşturuyorum ama onlara erişemiyorum
kaya

24

{{ data.0 }} çalışmalı.

Diyelim ki data.objdjango denemeleri yazdınız data.objve data.obj(). Çalışmazlarsa dener data["obj"]. Sizin durumunuzda data[0]olarak yazılabilir {{ data.0 }}. Ancak data[0]görünümü çekip ayrı değişken olarak göndermenizi tavsiye ederim .


1

@ jennifer06262016, bir django Sorgu Kümesi içindeki nesneleri döndürmek için kesinlikle başka bir filtre ekleyebilirsiniz.

@register.filter 
def get_item(Queryset):
    return Queryset.your_item_key

Bu durumda, bir sözlük nesnesine erişmek için şablonunuza şöyle bir {{Sorgu | dizin: x | get_item}} yazarsınız. Benim için çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.