اذهب إلى المحتوى

السؤال

نشر

لدي بعض البيانات التي يتم إحضارها من قاعدة بيانات، وأريد أن أعرضهم في قالب jinja2 ، لكن أولًا أريد الفصل بين العناصر بأسطر (العنصر br) وليس فواصل خطية. لذلك حاولت أن أستخدم الدالة replace بالشكل التالي:

{{ 'username|name|email' | replace("|", ":<br/>") }}

لكن المشكلة هي أنه يتم عرض النص بدون عرض عناصر HTML نفسها، ويظهر النص التالي كما هو في المتصفح:

username:<br/>name:<br/>email:<br/>

كيف أجعل المتصفح يقوم بإستخدام عنصر br لكتون النتيجة كالتالي؟

username:
name:
email:

 

Recommended Posts

  • 1
نشر

يُمكنك تعطيل خاصية  الautoescape للحصول على النتيجة التي ترغب بها:

{% autoescape false %}
  {{ 'username|name|email' | replace("|", ":<br/>") }}
{% endautoescape %}

لكن هذه الطريقة لا يُنصح بها لأنك تقوم بعطيل الحماية ضد حَقْن ال HTML أو ما يُعرف بالإنجليزية HTML Injection.

في طريقة أخرى وهي إنشاء مُرشح خاص يقوم بهذا العمل:

# myapp/util/filters.py

from .. import app
from markupsafe import Markup

@app.template_filter()
def custom_split(text):
    """ الفصل بين العناصر بأسطر"""
    return Markup("<br>".join(text.split("|")))

القالب يُصبحْ:

{{ 'username|name|email'|custom_split }}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...