Расширение urlize в Джанго - PullRequest
       0

Расширение urlize в Джанго

31 голосов
/ 19 февраля 2010

функция urlize из django.utils.html преобразует ссылки в интерактивные ссылки. Моя проблема в том, что я хочу добавить target = "_ blank" в "", чтобы открыть эту ссылку в новой вкладке. Можно ли как-нибудь расширить функцию urlize, чтобы получить дополнительный аргумент? или я должен сделать пользовательский фильтр, используя регулярные выражения для этого? Это эффективно?

Ответы [ 4 ]

58 голосов
/ 24 марта 2010

Вы можете добавить пользовательский фильтр, как описано здесь :

Я использовал это:

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 }}

У меня отлично работает :)

13 голосов
/ 15 октября 2011

Самая короткая версия, которую я использую в своих проектах. Создайте новый фильтр, который расширяет фильтр по умолчанию для 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"'))
4 голосов
/ 19 февраля 2010

Во встроенном urlize() нет возможности сделать это. Благодаря лицензии Django вы можете скопировать код django.utils.html.urlize и django.template.defaultfilters.urlize в свой проект или в отдельное приложение и использовать вместо этого новые определения.

0 голосов
/ 19 февраля 2010

Вы не должны добавлять target="_blank" к своим ссылкам, это устарело.Пользователи должны сами решить, хотят ли они открыть ссылку.

Вы по-прежнему можете открыть ссылку с помощью ненавязчивого JavaScript, например, так (используя jQuery):

$('.container a').click(function(e){e.preventDefault();window.open(this.href);});

При этом вы можете написатьваш собственный фильтр, но вам придется скопировать много кода из django.utils.html.urlize, а не DRY .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...