2012-07-12 110 views
2

我正在創建一個應用程序來顯示文章。在我的模型中,我有一個包含文章內容的TextField。在TextField中渲染django應用程序

現在我想能夠在我的文章中呈現另一個應用程序。假設我有一個投票應用程序,我想在文章的中間顯示投票。我怎樣才能做到這一點 ?

我嘗試在帖子中添加一個{% render_poll 42 %},但是,正如所料,它只是顯示在生成的頁面中。

我應該在顯示呈現的html頁面之前創建某種標記(比如說讓[poll=42])並解析它嗎? (我使用markdown庫,也許我可以擴展它。)我該如何做到這一點,以保持良好的「django友好」方式?我想,在管理面板中,我可以在文章中輕鬆插入投票(或其他應用程序)。

+3

你應該使用像'django-cms'或類似的東西 - 這將允許你創建由各種類型的內容組成的文章/文章;文本,視頻,自定義插件(如民意調查)等 – 2012-07-12 08:43:11

+0

謝謝,我真的不明白'django-cms'代碼,但'django-basic-apps'使用內聯,如此屏幕錄像http:// www所示。 screenr.com/8BH似乎在做這項工作 – 2012-07-12 11:09:08

回答

1

您可以將compile的TextField字符串作爲模板。即:

from django.db import models 
from django.template import Template, Context 


class YourModel(models.Model): 
    body = models.TextField() 

    def render_body(self, context=None): 
     template = Template(self.body) 
     context = context or {} 
     context['object'] = self 
     return template.render(Context(context)) 

然後在實際的模板,你可以使用{{ your_model.render_body }}而非{{ your_model.body }}

+0

謝謝。我想這會工作,但我更喜歡帶內聯的django-basic-apps解決方案(參見Timmy O'Mahony的答案),這可能更靈活。 – 2012-07-12 11:22:46

+0

感謝您的反饋。你當然可以選擇django-basic-apps。但我很好奇如何使用一些額外的渲染層比直接使用Django模板API更靈活...你是什麼意思「靈活」? – jpic 2012-07-12 11:36:01

+0

你說得對,它實際上不是更靈活。假設這是我可以使用的已經建好的抽象層。 – 2012-07-12 12:36:11