2015-09-03 40 views
0

我試着用CamelCase創建一個新頁面。我在下面,他們使用自定義過濾器wikify頁教程:與CamelCase建立鏈接

from django import template 
import re 

wikilink = re.compile("\\b([A-Z][a-z]+[A-Z][a-z]+)\\b") 
register = template.Library() 

@register.filter 
def wikify(value): 
    return wikilink.sub(r"<a href='/wikicamp/\1/'>\1</a>", value) 

在turtorial此代碼應工作。我沒有得到一個錯誤,但在我的應用程序也只能說明這一點:

<a href='/wikicamp/NewPage/'>NewPage</a>

,而不是新頁的駝峯「字」。 我可以用另一種方式做,或者我做錯了什麼?

+0

嘗試使用雙引號代替單引號 –

+0

你的問題不明確。實際輸出與期望輸出有什麼不同? –

+0

我可以在頁面上編輯一些文字。這段文字說:這個鏈接到一個NewPage。 而不是NewPage是一個鏈接,它仍然是一個字符串:這個鏈接到一個NewPage

回答

0

您需要將輸出標記爲要呈現的HTML的「安全」。如果你相信,可以給予模板過濾器的任何輸入,你知道這不可能是惡意的,你可以做到這一點,像這樣:

from django.utils.safestring import mark_safe  

@register.filter 
def wikify(value): 
    output = wikilink.sub(r"<a href='/wikicamp/\1/'>\1</a>", value) 
    return mark_safe(output) 
+0

它沒有任何區別:( –

+0

我的道歉,我有一個錯誤的安全標記進程 - '@ register.filter(is_safe = True)'表明過濾器不會添加可能需要轉義的字符。添加HTML標籤顯然不是這樣,相反,請參閱上面我編輯的答案以進行標記輸出安全 – ryanmrubin

+0

謝謝你的人! –