2009-07-29 60 views
1

我正在嘗試自定義用Django編寫的CMS。內容編輯人員不夠靈活,所以我試圖想出一個更好的解決方案。在Django中編寫模板標籤

沒有過度解釋它,我想它有點像django-better-chunksdjango-flatblocks。您可以完全從模板中設置可編輯區域。我想將這些可編輯區域綁定到字符串和對象實例的組合。一個例子是基於一個產品有多個可編輯區域:

{% block product_instance "title" %} 
{% block product_instance "product description" %} 

所以,如果你有其他產品的圖作爲product_instance這兩個blocks會顯示不同的數據。我還會看到有用於僅通過字符串部分的站點範圍塊。本質上,我希望能夠傳遞1-infinity標識符。

但我真的很掙扎在這裏有兩個方面:

  1. 如何定義的混合標識與實際內容「block」實例之間的關係?我有一種感覺內容類型可能在這裏,但我真的不知道從哪裏開始尋找!

  2. 而我該如何編寫一個模板標籤來讀取上述語法並將其轉換爲一個對象進行渲染?

+1

將t他可編輯區域有時會與非模型相關聯?這需要一箇中間模型將保存的數據存儲在數據庫中以獲取這些字符串。讓我知道,當我回家時我會舉一個例子。聽起來很酷! – Cide 2009-07-29 14:30:15

回答

2

爲此,您可以創建一個包含標籤和使用它像:

{% load my_tags %} 
{% product bicycle <extra vars ...> %} 

要定義的標籤,添加到您的應用程序/ templatetags/mytags.py:

@register.inclusion_tag('results.html') 
def product(item, *extra): 
    #maybe repackage extra variables 
    #and add them to the returned dictionary 
    item_form = ItemForm(item) #form.ModelForm instance 
    return {'item': item, 'item_form':item_form, ...} 

然後,您需要一個模板,該模板返回項目的html:

<h1>{{item.title}}</h1> 
{{item_form}} 
... add some conditional statements depending on extra vars