2015-04-02 43 views
0

在我的項目(基於Django的1.7)我有一個模板:如何重建django的模板?

views.py:

def help(request, page, anchor): 
    return render(request, 'help.html') 

help.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head> 
     <TITLE>FinBox Help - {{ pagename }}</TITLE> 

     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

     <link rel="icon" href="media/pic/favicon.png" type="image/png"> 
     <link rel="shortcut icon" href="media/pic/favicon.png" type="image/png"> 
     <link rel="stylesheet" href="/media/css/docs.css" type="text/css"> 

     <script type="text/javascript"> 
      function tree_toggle(event) { 
       event = event || window.event 
       var clickedElem = event.target || event.srcElement 

       if (!hasClass(clickedElem, 'Expand')) { 
         return // click out the list 
       } 

       // Node, on which we've clicked 
       var node = clickedElem.parentNode 
       if (hasClass(node, 'ExpandLeaf')) { 
         return // click on the list 
       } 

       // define a new class for node 
       var newClass = hasClass(node, 'ExpandOpen') ? 'ExpandClosed' : 'ExpandOpen' 
       // replace the current class on newClass 
       // regexp finds isolated open|close and change it to newClass 
       var re = /(^|\s)(ExpandOpen|ExpandClosed)(\s|$)/ 
       node.className = node.className.replace(re, '$1'+newClass+'$3') 
      } 


      function hasClass(elem, className) { 
        return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className) 
      } 
     </script> 

     <style type="text/css"> 
     body 
     { 
      background-color: white; 
      background-image: none; 
      color: black; 
      font-family: Arial, Sans-Serif; 
      font-size: smaller; 
      font-style: normal; 
     } 

      A { 
      text-decoration: none; 
      } 
      A:hover { 
      text-decoration: underline; 
      color: red; 
      } 
     </style> 
    </head> 

    <body> 

     {% csrf_token %} 

     <div style="float:left; margin-left:310px;"> 
      Explanation how it works. 
     </div> 

     <div style="position:fixed; width:300px;"> 
      <div onclick="tree_toggle(arguments[0])"> 
       <ul class="Container"> 
        <li class="IsRoot"> 
         <div class="Expand"> 

         </div> 

         <div class="Content"> 
          Content 
         </div> 

         <ul class="Container"> 
          <li class="Node ExpandClosed"> 
           <div class="Expand"> 

           </div> 


           <div class="Content"> 
            <a href="/help/pur/"> 
             Destination 
            </a> 
           </div> 

           <ul class="Container"> 
            <li class="Node ExpandLeaf IsLast"> 
             <div class="Expand"> 

             </div> 

             <div class="Content"> 
              <a href="/help/test/"> 
               тест 
              </a> 
             </div> 
            </li> 
           </ul> 
          </li> 

          <li class="Node ExpandLeaf IsLast"> 
           <div class="Expand"> 

           </div> 

           <div class="Content"> 
            <a href="/help/errors/"> 
             System Exceptions 
            </a> 
           </div> 
          </li> 
         </ul> 
        </li> 
       </ul> 
      </div> 
     </div> 
    </body> 
</html> 

我不得不更換:

<ul class="Container"></ul> 

部分帶有必須呈現目錄結構的動態代碼:

for root, dirs, files in os.walk(startpath): 
    print root, dirs, files 

如何更好地以django模板的方式執行它?我查看了文檔,看起來我需要從頭開始重新編寫它,然後將其降低到基於類的模板。是對的還是不需要做? http://www.tangowithdjango.com/book/chapters/templates.html

謝謝!

回答

0

首先,您應該分開考慮想要顯示在前端的項目以及如何在後端收集它們。讓我們從後者開始。

看起來你正在把各種排序列表放在一起。如何準備這個列表並不重要,或者如果它甚至可以作爲列表(你也可以傳遞對象,如果你喜歡的話 - 雖然我不會推薦在一般的練習中這樣做,因爲你可能會意外地傳遞給前端你不認爲的東西),只要你這樣做。此代碼很可能會在您的應用程序/ views.py中執行

一旦擁有此列表,您需要將其傳遞給模板以供其呈現。通過傳遞方面,在下面叫mycontext的例子,你的模板,像這樣做:

return render(request, 'help.html', context = mycontext) 

在模板中,你現在能叫出你通過上下文空前絕後。如果您願意,您甚至可以通過此環境執行循環。有關動態模板的更多詳細信息,請訪問:https://docs.djangoproject.com/en/1.7/ref/templates/builtins/