2016-03-22 33 views
1

我試圖在Django中顯示Vigenere廣場,但我想指定一個顏色到特定的行和列,以便可以從其餘的廣場。通過這個實現,整個正方形都是彩色的。我期待的第一行是彩色的,第一列也是彩色的。其餘的必須是白色的。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