私の Django テンプレートでは、for ループ内に for ループを作成しようとしています。コンストラクターの2番目のリストの名前として、フィールドの1つの結果を使用しようとしています。
テンプレートに 2 つのオブジェクトが正常に渡されました。
sectList = {"Id": 1, "Section": "Home", "Identifier": "homeList"}
homeList = {"Id": 1, "Title": "Home", "Url": "home/",
"Id": 2, "Title": "My Account", "Url": "account/",
"Id": 3, "Title": "Full List", "Url": "fullList/",}
私のテンプレートには次のものがあります。
<ul>
{% for section in sectList %}
{% autoescape off %}
<li class="middle_table_li">
<table class="middle_table">
<tr>
<td colspan="2" class="middle_table_cell">
<a href="" class="middle_a_dark">
{{ section.Identifier }}
</a>
</td>
</tr>
<tr>
{% for view in section.Identifier %}
<div style="padding: 0px; margin: 0px; width: 100%;">
{{ view.title }}
<table style="text-align: left;">
<tr>
<td>
<a href="{{ view.url }}" class="left_a_light">{{ view.title }}</a>
</td>
</tr>
</table>
</div>
{% endfor %}
</tr>
</table>
</li>
{% endautoescape %}
{% endfor %}
</ul>
" {% for view in section.Identifier %} " を使用すると、view.titleは "homeList" という単語を返し、反復ごとに 1 文字 (h、o、m、e など) を分割します。「 {% for view in {{section.Identifier}} %} 」を試すと、次のエラーが表示されます。
TemplateSyntaxError at /
Could not parse the remainder: '{{section.Identifier}}' from '{{section.Identifier}}'
私の質問は、for ループのコンストラクター内で 1 つのクエリセットからの結果をどのように使用できるかということです。テンプレートでは、section.Identifier = 'homeList' であり、ビューは正常に homeList データを送信しますが、ビューの homeList 変数を使用する代わりに、文字列を list("homeList") のようなリストに分割しているように見えます。となり、その結果、各行は単語homeListの 1 文字で構成されます。通常のpythonコードでは、execのようなものを使用して文字列をコードとして実行できますが、djangoテンプレートでこれを行う方法がまったくわかりません.
編集#1(参考までに、すべてのデータがテンプレートに正常に渡されます)
ビュー.py
# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.db import connection, transaction
from app_HomeView.models import HomeList
from view_LeftPanel.models import LeftPanelList
def HomeView(request):
homeList = HomeList.objects.all().order_by("title")
cursor = connection.cursor()
cursor.execute("SELECT * FROM view_leftpanelview_sectionlist ORDER BY Id;")
desc = cursor.description
sectList = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]
return render(request, "index.html", {"homeList": homeList,
"sectList": sectList,})