2011-08-29 68 views
1

假設我有一個用Markdown編寫的Django模板。Django模板和降價

首先處理降價,然後渲染模板,或者我應該渲染模板,然後通過Markdown過濾器發送它是否有意義?

從計算的角度來看,第一個是可取的,因爲我要在一個循環中渲染模板。我只是想知道是否有一些可能的缺點,我沒有想到。

一些供參考代碼:

import markdown 
from django import template 

# Here, template_content_md would actually come from the database 
template_content_md = """ 
{{ obj.title }} 
----------- 
**{{ obj.author }}** 

(more Markdown content here using variables) 

[More info]({{ obj.get_absolute_url }}) 
""" 

output_list = [] 

# first method 
template_content_html = markdown.markdown(template_content_md) 
for obj in object_list: 
    tt = template.Template(template_content_html) 
    content_html = tt.render(Context({'obj': obj})) 
    output_list.append(content_html) 

#second method 
for obj in object_list: 
    tt = template.Template(template_content_md) 
    content_md = tt.render(Context({'obj': obj})) 
    content_html = markdown.markdown(content_md) 
    output_list.append(content_html) 

正如你所看到的,在第二個版本,markdown.markdown爲每個objobject_list運行一次。

回答

2

既然你是從降價格式的內容生成什麼是Django模板它對使用第一種方法(生成從降價的HTML模板,然後使用生成的Django的模板在一個循環中)最有意義。

除了更快,還可以確保obj中沒有任何內容被Markdown意外轉換爲HTML。

我會「緩存」 Django模板:

template_content_html = markdown.markdown(template_content_md) 
# Only generate the template once 
tt = template.Template(template_content_html) 

for obj in object_list: 
    content_html = tt.render(Context({'obj': obj})) 
    output_list.append(content_html) 
+0

其實只是想起一個情況下,這是一個問題:我使用的urlize功能在降價自動突出顯示的鏈接(例如,在模板中,它將是'{{obj.author.email}}',呈現給'email @ domain.org',然後由Markdown翻譯爲'[email protected]'。我使用了一些其他Markdown過濾器這也是,所以我只需要看看我是否可以在完成模板渲染後複製該功能。 –