Obiekt, który przekazuję z widoku do szablonu ma kilka pól, które są dynamicznie zwiększane i alokowane
Np. obiekt wygląda następująco:
row = {
'id':id,
'input.object1':obj1
'input.object2':obj2
}
Próbuję uzyskać dostęp do wartości „input.object1” jako „{{row.input.object1}}” w szablonie. ale strona nie pokazuje niczego dla tego pola (ten sam problem dla „input.object2”. Ale „row.id” działa dobrze)
{% for row in row_list %}
<tr>
<td>{{ row.id }}</td>
<td>{{ row.input.object1 }}</td>
<td>{{ row.input.object2 }}</td>
</tr>
{% endfor %}
Czy jest w ogóle dostęp do tych wartości w html? Z góry dziękuję :)
2 odpowiedzi
Możesz wypróbować następującą strukturę swojego kontekstu:
row = {
'id': id,
'input': {'object1': obj1, 'object2': obj2}
}
Co pozwoli ci uzyskać dostęp do wartości w sposób, w jaki wypróbujesz to w swoim szablonie. Ale jeśli ta struktura jest dynamiczna i ma zmienną długość, lepiej jest użyć listy:
row = {
'id': id,
'input': [obj for obj in ....]
}
I w szablonie
{% for row in row_list %}
<tr>
<td>{{ row.id }}</td>
{% for obj in row.input %}
<td>{{ obj }}</td>
{% endfor %}
</tr>
{% endfor %}
Języki szablonów Django używają kropek w nazwach zmiennych, aby wskazać indeks (listy itp.), Klucz (dict-polubienia) lub atrybut (cokolwiek innego), więc dla {{ row.input.object1 }}
najpierw próbuje rozwiązać row.input
jako albo row["input"]
lub row.input
- żadne z nich nie istnieje.
Chcesz utworzyć input
listę lub dyktando, tj .:
row = {
'id':id,
'input'= [obj1, obj2]
}
I wtedy
{{ row.input.0 }} - {{ row.input.1 }}
Lub
row = {
'id':id,
'input'= {"object1": obj1, "object2": obj2}
}
I wtedy
{{ row.input.object1 }} - {{ row.input.object2 }}
Podobne pytania
Powiązane pytania
Nowe pytania
django
Django to framework aplikacji internetowych typu open source po stronie serwera, napisany w języku Python. Został zaprojektowany w celu zmniejszenia wysiłku potrzebnego do tworzenia złożonych witryn i aplikacji internetowych opartych na danych, ze szczególnym naciskiem na mniej kodu, brak nadmiarowości i bardziej jawny niż niejawny.