django.utils.html的urlize函數將url轉換爲可點擊的鏈接。我的問題是,我想追加一個目標=「_ blank」到「< href ..>」中,以便我在一個新標籤中打開此鏈接。有沒有什麼方法可以擴展urlize函數來接收額外的參數?或者我應該使用正則表達式做一個自定義過濾器來做這個東西?這是否有效?在django中擴展urlize
回答
內置urlize()
沒有這樣做的能力。由於Django的許可證,您可以將django.utils.html.urlize
和django.template.defaultfilters.urlize
的代碼複製到您的項目或單獨的應用程序中,並改爲使用新定義。
您不應該將target="_blank"
添加到您的鏈接,它已被棄用。用戶應該自行決定他們想在哪裏打開鏈接。
您仍然可以打開鏈接與非侵入式JavaScript像這樣(使用jQuery):
$('.container a').click(function(e){e.preventDefault();window.open(this.href);});
這就是說,你可以編寫自己的過濾器,但你必須有很多的代碼複製django.utils.html.urlize
,不是真的DRY。
您可以添加自定義過濾器,如描述here:
我用這一個:使用的
def url_target_blank(text):
return text.replace('<a ', '<a target="_blank" ')
url_target_blank = register.filter(url_target_blank, is_safe = True)
例子:
{{ post_body|urlize|url_target_blank }}
工作正常,我:)
很酷的答案,它也幫助我,謝謝! – dana 2010-06-19 08:54:30
我不得不添加:url_target_blank.is_safe = True以防止Django轉義鏈接。 – 2010-07-08 17:40:54
爲了更廣泛地使用url_target_blank並使其稍微更緊密:我會在返回行中使用正則表達式: def url_target_blank(value): return re.sub(「」+)(?「,'<一個目標=「_ blank」\\ 1>',值) – Boaz 2010-12-14 10:16:33
最短的版本,我在我的項目中使用。創建一個新的過濾器,它擴展了Django的默認過濾器:
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.safestring import mark_safe
from django.utils.html import urlize as urlize_impl
register = template.Library()
@register.filter(is_safe=True, needs_autoescape=True)
@stringfilter
def urlize_target_blank(value, limit, autoescape=None):
return mark_safe(urlize_impl(value, trim_url_limit=int(limit), nofollow=True, autoescape=autoescape).replace('<a', '<a target="_blank"'))
您還需要'from django.utils.safestring import mark_safe' – Nick 2014-08-26 21:13:03
您是對的 - 謝謝。答案已更正。 – 2014-08-27 06:24:21
- 1. 在Django-Taggit中擴展TagBase
- 2. 擴展機型在Django中
- 3. 在Django中擴展模型
- 4. 擴展在Django 1.7
- 5. Django UserProfile擴展
- 6. 擴展django-tables2
- 7. Django UserCreationForm擴展
- 8. 在Django中爲擴展用戶擴展UserCreationForm
- 9. 擴展一個已經在Django中擴展的模板
- 10. Django的:擴展allauth.account
- 11. Django擴展模板
- 12. Django擴展模板
- 13. 擴展django用戶
- 14. 在Django中擴展social_auth用戶模型
- 15. 如何在django中擴展Site模型?
- 16. 在Django中擴展用戶模型
- 17. 在Django中擴展南內省
- 18. 在Django中擴展用戶模型
- 19. 擴展在Django中不起作用1.9
- 20. 在Django中擴展管理面板
- 21. 在django中使用urlize不受信任的文本
- 22. Django的擴展用戶模型中沒有擴展屬性
- 23. Django的擴展和庫
- 24. 動態擴展Django表格
- 25. Django + Jquery,擴展AJAX div
- 26. Django模板擴展問題
- 27. 擴展Django表格模板
- 28. 如何擴展django BaseDateListView
- 29. Django join-like擴展queryset
- 30. 擴展用戶模型Django
在HTML5中不再棄用。 – 2011-11-14 13:04:50
「在HTML5中不再棄用」這是真的。 W3Schools稱[HTML5標籤A](http://www.w3schools.com/html5/tag_a.asp),另一篇文章稱[XHTML已棄用目標標籤](http://www.infranet.com/_blog/Complete_Website_Optimization_Blog/ post/Replacing_the_XHTML_deprecated_a_target_tag /) – 2011-12-18 21:20:09
W3Schools不是一個好的來源。而是直接去規範。 – stefanw 2012-06-01 09:39:44