2012-03-07 50 views
0

我的模型中有一些數據不斷地使用相同的html/js/css呈現。我很想嘗試使用自定義模板標籤來簡化將模型渲染到{% create_component mymodel %}之類的東西。但問題是,CSS/JS也包括在內,我希望能夠自動添加到頁面的頭部(而不是在頁面正文的某處)如何在django中編寫可重用的html/css/js組件?

有沒有辦法實現這一點?

謝謝!

+0

爲什麼不把它分開,並有3個模板標籤? 'create_html','create_css','create_js'等? – bonsaiviking 2012-03-07 01:49:38

+0

主要是爲了保持代碼清潔並堅持幹。如果我忘記了三個標籤中的一個或兩個,該怎麼辦?如果我不需要顯示該組件,該怎麼辦? (我需要重複'if'3次,並希望我不要錯字)。我只是想看看我能否避免那些天真的解決方案可能帶來的痛苦。 – Sandro 2012-03-07 02:46:47

+0

我從來沒有做過自定義的django模板標籤,但是如果你可以[在其中]重新定義django模板塊,如果在你的基本模板中,你將擁有用於CSS,js的塊,無論你想要什麼,你都可以追加到這些塊。那麼你可以做'{%create_component mymodel css_block js_block%}',它會在現場呈現html並在相應的塊中添加適當的css和js – miki725 2012-03-07 07:25:20

回答

0

我使用隊列爲labjs寫了一個django templatetag。除了減少資源阻塞的優勢之外,它還使創建包含自己的JavaScript的組件更容易,而不必擔心性能或雙重調用。

如果你加載一個javascript文件兩次,它會忽略第二次調用,並將它與django壓縮結合使用,你可以製作「bundles」。它仍然不是完美的,我正在研究編寫一個使用headjs的django應用程序,併爲處理可重用的包含html和css的django組件構建更成熟或全面的應用程序。

這將適用於js,但對於css,您可以做類似的動態加載css文件的js庫。

在客戶端處理此問題的優點是您可以獲得延遲加載的防阻塞優勢。

如果你只是想一個簡單而簡單的服務器端的方式,你要找的是一個css/js註冊表。您可以輕鬆編寫一箇中間件,輸出所有「註冊」的js和css頭文件,並且可以在您的自定義模型模板標籤中包含一些註冊的css/js。

您可能可以使用或重複使用django-assets

相關問題