كيف يمكنني الحصول على الثعبان-تخفيض السعر بالإضافة إلى "urlify" الروابط عند تنسيق نص عادي ؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

تخفيض السعر هو أداة عظيمة تنسيق نص عادي إلى حد html, ولكنه لا يتحول النص العادي الروابط في عناوين المواقع تلقائيا.مثل هذا واحد:

http://www.google.com/

كيف يمكنني الحصول على تخفيض السعر إلى إضافة علامات إلى عناوين url عندما شكل كتلة من النص ؟

هل كانت مفيدة؟

المحلول

لم أستطع الحصول على التعبير العادية superjoe30 لتجميع، ولذا فإنني تكييفها حل له لتحويل عناوين المواقع العادي (داخل النص تخفيض السعر) لتكون متوافقة تخفيض السعر.

ومرشح تعديل:

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)

وضمن قالب:

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

نصائح أخرى

هل يمكن كتابة امتدادا لتخفيض السعر. حفظ هذا الكود كما 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)

وبعد ذلك استخدامها في القالب الخاص بك مثل هذا:

{% load markdown %}

(( content|markdown:'autolink'))

تحديث:

ولقد وجدت مشكلة مع هذا الحل: عند استخدام بنية الرابط القياسية تخفيض السعر والجزء عرض مباريات التعبير العادي، على سبيل المثال:

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

والغريب يصبح:      www.google.com

ولكن الذي تريد أن تفعل ذلك على أي حال؟!

وأفضل سيناريو، تحرير تخفيض السعر وضعت للتو <> حول عناوين المواقع. وهذا سيجعل من نقر الارتباط. المشكلة الوحيدة هي أنه يتطلب تثقيف المستخدمين، أو من يكتب تخفيض السعر.

هذه ليست ميزة تخفيض السعر-ما يجب عليك القيام به هو تشغيل وظيفة المعالج ضد النص تبحث عن عنوان URL مثل نمط.هناك مثال جيد في Google app engine التعليمة البرمجية الموجودة في المثال -- انظر AutoLink تحويل.

وكنت تستخدم بفك الإطار ، التي لديها مرشح دعا urlize، الذي يفعل بالضبط ما أريد . ومع ذلك، فإنه يعمل فقط على نص عادي، لذلك لا يمكن أن تمر من خلال إخراج تخفيض السعر. تابعت هذا دليل لإنشاء عامل تصفية مخصص يسمى urlify2 الذي يعمل على أتش تي أم أل، ومرت النص من خلال هذا الفلتر:

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

ومرشح urlify2.py:

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)

وهناك مبلغ إضافي لهذا في بيثون markdown2:

http://code.google.com/p/python-markdown2 / ويكي / LinkPatterns

وأعرف أن هذا السؤال هو عقد تقريبا من العمر، ولكن تخفيض السعر-urlize يغطي كل حالة استخدام الممكنة كنت أفكر فيه بما لا تتطلب HTTP (ق): // قبل رابط، وترك قوسين في (google.com)، وإزالة الأقواس من <google.com>، وتجاهل عناوين المواقع في كتل التعليمات البرمجية، وأكثر من ذلك لم أكن قد فكرت في:

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

وليس هناك نقطة تثبيت، ولكن يمكنك مجلد مشترك هذا:

https://raw.githubusercontent.com/r0wb0t/markdown -urlize / الماجستير / mdx_urlize.py

وبعد ذلك إما بوضع ملف أعلاه على مسار الثعبان (الخيار الأول) أو لا (الخيار الثاني) ثم استخدم أحد الإجراءات التالية:

markdown.markdown(text, extensions=['urlize'], safe_mode=True)
markdown.markdown(text, extensions=['path.to.mdx_urlize'], safe_mode=True)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top