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中扩展模型
- 2. 扩展机型在Django中
- 3. 在Django-Taggit中扩展TagBase
- 4. 扩展在Django 1.7
- 5. Django UserProfile扩展
- 6. 在Django中为扩展用户扩展UserCreationForm
- 7. Django扩展模板
- 8. Django的:扩展allauth.account
- 9. Django扩展模板
- 10. 在django中使用urlize不受信任的文本
- 11. 如何在django中扩展Site模型?
- 12. 扩展在Django中不起作用1.9
- 13. 在Django中扩展南内省
- 14. 在Django中扩展用户模型
- 15. 在Django中扩展管理面板
- 16. 在Django中扩展用户模型
- 17. Django的扩展用户模型中没有扩展属性
- 18. 用类扩展Django ModelForm
- 19. Django join-like扩展queryset
- 20. django-facebookconnect扩展权限
- 21. Django扩展错误消息
- 22. Django导航:扩展与innerHTML
- 23. Django的扩展和库
- 24. 扩展Django管理模板
- 25. Django:如何扩展settings.py?
- 26. 扩展django用户模型
- 27. Django模板扩展问题
- 28. 扩展用户模型Django
- 29. Django + Jquery,扩展AJAX div
- 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