0

私の 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,})
4

2 に答える 2

1

はい、できますが、ビュー コードが間違った値を渡したため、機能しませんでした。あなたが持っている:

sectList = [{"Id": 1, "Section": "Home", "Identifier": "homeList"}]

次に、テンプレートでは、最初のループの後、の結果section.Identifierは明らかに is であるため、次"homeList"のように実行します。

for i in "homeList":
    print i

「homeList」文字列のすべての文字を出力します。

したがって、 のリストを のhomeList中にネストする必要があります。次のようにする必要がありsecListますsecList

sectList = [{ 
    "Id": 1, "Section": "Home", "Identifier": [  # Identifier should be a list
        {"Id": 1, "Title": "Home", "Url": "home/"},
        {"Id": 2, "Title": "About", "Url": "about/"}
    ] 
}]

そして、これはあなたの挑戦ですよね?

于 2013-07-29T23:28:16.870 に答える