2016-03-22 12 views
1

DjangoにVigenere Squareを表示しようとしていますが、特定の行と列に色を指定して残りの部分正方形。この実装では、四角形全体が色付けされています。私は最初の列を着色し、最初の列も着色することを探しています。残りは白でなければなりません。Django - 2Dリストから特定の行と列を選択する

テンプレート:

<div class="hidden-xs"> 
      <table id="show-table"> 
       <tbody> 
       {% for row in vigenereExample %} 
        {% if row.0 %} 
        <tr style="background-color: #98AFC7;"> 
         {% for col in row %} 
          <td> 
          {{col}} 
          </td> 
         {% endfor %} 
        </tr> 
        {% else %} 
        <tr> 
         {% for col in row %} 
         <td> 
          {{col}} 
         </td> 
         {% endfor %} 
        </tr> 
        {% endif %} 
       {% endfor %} 
      </tbody> 
      </table> 
     </div> 

View.py

def vigenereHome(request): 
object = VigenereCipher() 
vigenereSquare = object.getSquaredAlphabet() 
vigenereExample = object.geSquareExample() 
context = { 
      'vigenereSquare' : vigenereSquare, 
      'vigenereExample' : vigenereExample 
} 
return render(request, "VigenereCipher.html", context) 

これはスクエア を構築するクラスですVigenereCipher.py

class VigenereCipher: 

squareAlphabet = [] 
squareExample = [] 

exampleKey = "NETWORK" 
letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
nonCapLetters = "abcdefghijklmnopqrstuvwxyz" 

def __init__(self): 
    # Initialize a list of lists. 27x27 array because of the Grid 
    self.squaredAlphabet=[ [ '' for x in range(27)] for j in range(27)] 
    self.squareExample=[['' for x in range(26)] for j in range(len(self.exampleKey) + 1)] 

    # Create Grid on column 
    for y in range(len(self.letters)): 
     #self.squaredAlphabet[0][y+1] = "x" 
     self.squaredAlphabet[0][y+1] = self.nonCapLetters[y] 
     self.squareExample[0][y] = self.letters[y] 

    # Create Grid on row 
    for y in range(len(self.letters)): 
     #self.squaredAlphabet[y+1][0] = "y" 
     self.squaredAlphabet[y+1][0] = self.nonCapLetters[y] 

    for y in range(len(self.exampleKey)): 
     self.squareExample[y+1][0] = self.exampleKey[y] 

    # Fill Vigenere Square 
    for x in range(len(self.letters)): 
     j = 0 
     for y in range(len(self.letters)): 
      j = y + x 
      if(j > 25): 
       j = j - 26 
      self.squaredAlphabet[x+1][y+1] = self.letters[j] 

    # For debugging purposes, display the Square. 
    # for x in range(len(self.squaredAlphabet)): 
    #  for y in range(len(self.squaredAlphabet)): 
    #   print("Position: x", x, "y", y, "=", self.squaredAlphabet[x][y]) 

    # Fills the exampleSquare 
    for x in range(len(self.exampleKey)): 
     j = 0 
     for y in range(len(self.letters)): 
      j = self.letters.index(self.exampleKey[x]) + y 
      if(j > 25): 
       j = j - 26 
      self.squareExample[x+1][y] = self.letters[j] 
    print(self.squareExample) 

def getSquaredAlphabet(self): 
    return self.squaredAlphabet 

def geSquareExample(self): 
    return self.squareExample 

答えて

1

おそらく何が必要

です
<div class="hidden-xs"> 
    <table id="show-table"> 
     <tbody> 
      {% for row in vigenereExample %} 
      <tr> 
       {% for col in row %} 
        {% if forloop.counter0 == 0 or forloop.parentloop.counter0 == 0 %} 
        <td style="background-color: #98AFC7;"> 
        {% else %} 
        <td> 
        {% endif %} 
         {{col}} 
        </td> 
       {% endfor %} 
      </tr> 
      {% endfor %} 
     </tbody> 
    </table> 
</div> 
+1

私は、誰かに感謝するつもりはないと思うが、これは本当にありがとうございます。私はforloop.counter0とforloop.parentloop.counter0については知らなかった。これはとても簡単です! – Silvestrini

関連する問題