Wie bekomme ich Python-Abschlag zusätzlich „urlify“ Links als Klartextformatierung?

StackOverflow https://stackoverflow.com/questions/203859

  •  03-07-2019
  •  | 
  •  

Frage

Markdown ist ein großes Werkzeug für die Formatierung von Klartext in ziemlich html, aber es Klartext-Links in URLs automatisch schaltet sich nicht ein. Wie diese:

http://www.google.com/

Wie erhalte ich Abschlag Tags URLs hinzufügen, wenn ich einen Block von Text zu formatieren?

War es hilfreich?

Lösung

Ich kann nicht superjoe30 regulären Ausdruck zu kompilieren bekommen, so angepasst ich seine Lösung Ebene URLs zu konvertieren (in Markdown Text) seine Abschrift kompatibel.

Das modifizierte Filter:

urlfinder = re.compile('^(http:\/\/\S+)')
urlfinder2 = re.compile('\s(http:\/\/\S+)')
@register.filter('urlify_markdown')
def urlify_markdown(value):
    value = urlfinder.sub(r'<\1>', value)
    return urlfinder2.sub(r' <\1>', value)

In der Vorlage:

<div>
    {{ content|urlify_markdown|markdown}}
</div>

Andere Tipps

Sie können eine Erweiterung Abschlag schreiben. Speichern Sie diesen Code als mdx_autolink.py

import markdown
from markdown.inlinepatterns import Pattern

EXTRA_AUTOLINK_RE = r'(?<!"|>)((https?://|www)[-\w./#?%=&]+)'

class AutoLinkPattern(Pattern):

    def handleMatch(self, m):
        el = markdown.etree.Element('a')
        if m.group(2).startswith('http'):
            href = m.group(2)
        else:
            href = 'http://%s' % m.group(2)
        el.set('href', href)
        el.text = m.group(2)
        return el

class AutoLinkExtension(markdown.Extension):
    """
    There's already an inline pattern called autolink which handles 
    <http://www.google.com> type links. So lets call this extra_autolink 
    """

    def extendMarkdown(self, md, md_globals):
        md.inlinePatterns.add('extra_autolink', 
            AutoLinkPattern(EXTRA_AUTOLINK_RE, self), '<automail')

def makeExtension(configs=[]):
    return AutoLinkExtension(configs=configs)

dann verwenden, in der Vorlage wie folgt aus:

{% load markdown %}

(( content|markdown:'autolink'))

Update:

Ich habe ein Problem mit dieser Lösung gefunden: Wenn Standard-Link-Syntax des Abschlags verwendet wird und der angezeigte Teil entspricht den regulären Ausdruck, zum Beispiel:

[www.google.com](http://www.yahoo.co.uk)

seltsam wird:      www.google.com

Aber wer wollen würde, dass auf jeden Fall tun?

Best-Case-Szenario, bearbeiten Sie den Abschlag und nur put <> um die URLs. Dadurch wird der Link anklickbar. Einziges Problem ist, es erfordert Ihre Benutzer zu erziehen, oder wer auch immer schreibt den Abschlag.

Dies ist kein Merkmal von Markdown - was Sie tun sollen, ist ein Post-Prozessor gegen den Text läuft für ein URL-ähnliches Muster suchen. Es ist ein gutes Beispiel in dem Google App Engine Beispielcode - vgl. die AutoLink Transformation

Ich war mit dem Django Framework , die einen Filter namens urlize hat, das ist genau das tut, was ich wollte . Aber es funktioniert nur auf Klartext, so konnte ich nicht, ist durch den Ausgang des Abschlags passieren. Ich folgte diesem Handbuch einen benutzerdefinierten Filter namens urlify2 zu erstellen die Arbeiten auf html, und übergeben Sie den Text durch diesen Filter:

<div class="news_post">
  {% autoescape off %}
    {{ post.content|markdown|urlify2}}
  {% endautoescape %}
</div>

Der urlify2.py Filter:

from django import template
import re

register = template.Library()

urlfinder = re.compile("([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}|((news|telnet|nttp|file|http|ftp|https)://)|(www|ftp)[-A-Za-z0-9]*\\.)[-A-Za-z0-9\\.]+):[0-9]*)?/[-A-Za-z0-9_\\$\\.\\+\\!\\*\\(\\),;:@&=\\?/~\\#\\%]*[^]'\\.}>\\),\\\"]")

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

Es gibt eine extra dafür in Python-markdown2:

http://code.google.com/p/python-markdown2 / wiki / LinkPatterns

Ich weiß, diese Frage fast ein Jahrzehnt alt ist, aber Abschlags-urlize deckt jeden denkbaren Fall Gebrauch I einschließlich nicht erforderlich http denken konnte (s): // vor einer URL, die Klammer in (google.com) verlassen, Entfernen der spitzen Klammern von <google.com>, ignoriert URLs in Codeblöcke, und mehr hatte ich nicht gedacht:

https://github.com/r0wb0t/markdown-urlize

Es gibt keinen pip installieren, aber Sie können diese wget:

https://raw.githubusercontent.com/r0wb0t/markdown -urlize / Master / mdx_urlize.py

und dann entweder mit der vorstehenden Datei auf dem Python-Pfad (erste Option) oder nicht (zweite Option) und dann eine der folgenden Optionen verwenden:

markdown.markdown(text, extensions=['urlize'], safe_mode=True)
markdown.markdown(text, extensions=['path.to.mdx_urlize'], safe_mode=True)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top