2013-01-02 114 views
0

我想添加在Django model_field的help_text性質的鏈接,條款和條件,基本上我想編寫的代碼,如:反向鏈接help_text

class UserRegisterData(models.Model): 

    accepted_terms = models.BooleanField(
      ... 
      help_text = u""Terms and conditions are avilable on <a href="{reg}">this iste</a> stronie""".format(reg = reverse("terms")) 
    ) 

WHIS明顯失敗,因爲的URLconf措手不及而模型正在實例化。

我甚至嘗試來包裝SimpleLazyObjecthelp_test,但它仍然沒有奏效。

我寧願不碰模板代碼。有沒有什麼辦法可以實現這一點,而不需要在字符串或設置中對網址進行硬編碼?

回答

6

我想這是django.core.urlresolvers.reverse_lazy是爲。
有關信息:它被添加在1.4到Django的,因此,如果您使用的是較早的版本,你需要升級。


正如評論mentionned,你仍然需要去解決的字符串格式化打破了該URL反向的「懶惰」:

from django.utils.translation import string_concat 

# ... 

help_text = string_concat(# Happens to be lazy! 
       u'Terms and conditions are available on <a href="', 
       reverse_lazy("terms"), 
       u'">this site</a>"', 
) 
+0

那麼它不工作,這是因爲:當作爲參數傳遞給'format' lazy_reverse結果仍然被評估,即使它沒有它仍然是因爲模型創建的Django期間評估調用'force_unicode'上'help_text'。 –

+0

@jb。 'force_unicode'不應該成爲一個問題,因爲它可能會被稱爲足夠遲的時間:例如,您可以將延遲評估的翻譯放在幫助文本中。格式化確實是有問題,但我認爲它可以使用'django.utils.translation.string_concat',這基本上是一個懶惰的字符串連接(並會給你一個'unicode'字符串)來解決。 –

+0

這確實是一個問題,在某些時候,我做了類似於: help_text = SimpleLazyObject(lambda:u「」「...」「」。format(reg = reverse(「terms」))) which which which在模型創建過程中被'force_unicode'評估,這是早期的。 –