2010-06-13 89 views
3

我是Django的新手。今天,我創建了一些Django自定義標籤,這並不困難。但是現在我想知道將一些jQuery或一些Javascript代碼包裝到自定義標記定義中的最佳方法是什麼。將自定義庫包含到我的代碼中的常規方法是什麼?例如:自定義Django標記和jQuery

{% faceboxify item %} 

因此,假設它會爲Facebox插件創建一個特定的HTML輸出。我只想學習一些優雅的方式將這個插件導入到我的代碼中。我希望上述定義對於所有功能都足夠了。有什麼辦法可以做到嗎?我找不到任何例子。也許我失去了一些東西..

回答

2

documentation你可以看到,寫作模板標籤涉及編寫目標函數和渲染器。所以我假設你目前的代碼如下所示:

def my_tag(parser, token): 
    # ... some code 
    return MyNode(...) 

class MyNode(template.Node): 
    def render(self, context): 
    # here is where you write your <script> tags 

所以基本上,你必須做的是掛在上下文中的變量,因此您可以知道是否針對特定的請求你已經包含的代碼加載所有你需要的腳本。

class MyNode(template.Node): 
    def render(self, context): 
    if '_included_faceboxify_deps' in context: 
     # render your <script> dependency includes 
     context['_included_faceboxify_deps'] = True 
    # render your <script>s that are specific for this call 

這應該是關鍵。它不像在頁面頂部包含依賴關係那樣優雅,但每次需要調用它們時都不會包含它們。

+0

謝謝,我想這就是我正在尋找的..我會盡快嘗試.. – pocoa 2010-06-13 16:37:57

0

你可以讓你的自定義標籤應用「class」值爲你的Javascript尋找。將您的Javascript添加爲常規.js <script>導入,並使用加載時函數來查找元素並根據需要操作它們。

因此,舉例來說,如果你的標籤創建<div>,你可以把它做到這一點:

<div class='faceboxify'> 
    <!-- whatever --> 
</div> 

你的JavaScript就可以做到這一點:

$(function() { 
    $('div.faceboxify').each(function() { 
    // ... stuff to be done to your "faceboxify" divs 
    }); 
}); 
+0

謝謝。我的問題是您的代碼的第二部分,也是 然後:

pocoa 2010-06-13 16:06:24

+0

我想找到一種方法,將代碼插入到通用的$(document)。就緒(函數()的第二部分{//此處}頁面的功能和插入導入語句頂部 – pocoa 2010-06-13 16:10:14

+0

嗯,我不是Django的專家,所以我不能評論「最好」的方式來做到這一點。在我熟悉的模板系統中,我可能*不會*擁有標籤代碼寫出'