Jinja: مرشح urlencode مفقود؟

تم إنشاؤها على ٨ مارس ٢٠١١  ·  6تعليقات  ·  مصدر: pallets/jinja

مرحبا،

في قائمة المرشحات المضمنة (http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters) لم أجد مرشح "urlencode". إنه مفقود؟

لا أفهم ، في jinja1 يوجد هذا الفلتر: http://wsgiarea.pocoo.org/jinja/docs/filters.html

هل لديك بعض التعليقات حول ذلك؟

يعتبر،
ستيفان

التعليق الأكثر فائدة

لأي شخص يتعثر في هذا يبحث عن مرشح urlencode ، تمت إضافته مرة أخرى في عام 2012 في 06a8b1c02b2091b31ef4f39ddde3184f25f58260 و 5145401fe5f9995a32757f34359623b87048ab8b. مناقشة في # 85.

يطلق عليه urlencode وليس urlquote أو urlquoteplus أو urlquote_plus أو urlescape (إضافة هذه لأي شخص آخر يهبط عبر البحث).

ال 6 كومينتر

لماذا لا تصنع خاصتك أثناء إعداده ، احرص على فهم كيفية ارتباط urllib.urlencode و urllib.quote و urllib.quote_plus.

بالنسبة لي ، انتهى بي الأمر بإنشاء وظيفة يمكن استخدامها كعامل تصفية ووظيفة قابلة للاستدعاء (تم إجراؤها لتطبيق flask):

@app.template_filter('urlencode')
def urlencode(uri, **query):
   parts = list(urlparse.urlparse(uri))
   q = urlparse.parse_qs(parts[4])
   q.update(query)
   parts[4] = urllib.urlencode(q)
   return urlparse.urlunparse(parts)
app.jinja_env.globals['urlencode'] = urlencode

المستخدمة في قالب كدالة:

{% set vendor_url = urlencode('http://www.google.com/search', q=adset.keyword.text) %}

المستخدمة في نموذج كعامل تصفية:

{% set vendor_url = 'http://www.google.com/search?q=%s' % querytext %}
{{ vendor_url|urlencode }}

لماذا لا تصنع خاصتك

نظرًا لأن jinja2 يحتوي بالفعل على العديد من عوامل تصفية الإنشاء (http://jinja.pocoo.org/docs/templates/#builtin-filters) و urlencode هو ميزة كلاسيكية يمكن إلحاقها في مرشحات builin.

يعتبر،
ستيفان

urllib.quote_plus(uri)

سيكون من الرائع أن يتم الالتزام بهذا الإصدار الرئيسي. إنه شيء يتوقعه المرء في نظام قالب كامل مثل jinja2.

radekstepangfuchedzhy لدي انطباع بأن الأمر ليس بهذه البساطة مثل تمرير السلسلة / العلامات من خلال الاقتباس أو الاقتباس الإضافي . في حالتي ، تسبب هذا في مشاكل يونيكود في quote_plus. يبدو أنه يجب تشفير unicode إلى utf-8 للعمل بشكل جيد مع quote_plus (). هذا هو الحل الخاص بي:

@app.template_filter('urlencode')
def urlencode_filter(s):
    if type(s) == 'Markup':
        s = s.unescape()
    s = s.encode('utf8')
    s = urllib.quote_plus(s)
    return Markup(s)

لأي شخص يتعثر في هذا يبحث عن مرشح urlencode ، تمت إضافته مرة أخرى في عام 2012 في 06a8b1c02b2091b31ef4f39ddde3184f25f58260 و 5145401fe5f9995a32757f34359623b87048ab8b. مناقشة في # 85.

يطلق عليه urlencode وليس urlquote أو urlquoteplus أو urlquote_plus أو urlescape (إضافة هذه لأي شخص آخر يهبط عبر البحث).

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات