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

السؤال

نشر

أحاول أن أقوم بعمل لوحة تحكم بإستخدام Flask و SQLAlchemy، وأريد أن أقوم بتمرير بعض المتغيرات إلى القالب بإستخدام render_template، لكن المشكلة هي أنه يتم تحويل كل أكواد HTML التي يتم تمريرها، وبالتالي كل الرموز < " ' > يتم تحويلها إلى HTML entities مثل ;it& 

كيف أقوم بتمرير كود HTML ليتم عرضه في القالب بدون أن يتم تحويله 

Recommended Posts

  • 1
نشر

هذه الخاصية تسمى autoescaping  وهي موجودة بشكل إفتراضي لحماية الموقع من ثغرات مثل XSS ، ولكن تدعم قوالب jinja إيقاف هذه الخاصية في جزء معين من خلال إضافة المرشح safe| إلى اسم المعامل، على النحو التالي:
 

{{ htmlcode|safe }}

وإن كان لديك العديد من المتغيرات التي تريد عرضها فيمكنك أن تقوم بإيقاف الخاصية autoescaping في جزء من القالب على النحو التالي:
 

{% autoescape false %}

{{ something }}
<p>{{ something_else }}</p>
<b>{{ something_important }}</b>

{% endautoescape %}

الطريقة الأخرى هي إستخدام MarkupSafe، حيث توفر الدالة Markup التي تقوم بنفس مهمة المرشح safe| السابق، يمكنك تحميل المكتبة من خلال الأمر التالي:

pip install -U MarkupSafe

ثم يمكنك أن تستعملها على النحو التالي

from markupsafe import Markup

htmlcode = Markup('<p>HTML Content</p>')

الآن يمكنك تمرير المتغير htmlcode إلى أي قالب وسوف يتم عرض محتواه بدون مشكلة وبدون إستعمال المرشح safe|

ملاحظة: لا تقم بإستخدام هذه الطرق إلا إذا كنت متأكد من محتوى htmlcode السابق، وذلك لكي لا يتعرض الموقع لهجمات cross-site scripting (XSS)

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...