كيفية تعطيل ترميز HTML عند استخدام السياق في Django

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

  •  04-07-2019
  •  | 
  •  

سؤال

في تطبيق Django الخاص بي ، أستخدم قالبًا لإنشاء هيكل البريد الإلكتروني ، أحد المعلمات هو عنوان URL ، لاحظ أن هناك معلمتان مفصولين بواسطة ampersand في عنوان URL.

t = loader.get_template("sometemplate")
c = Context({
   'foo': 'bar',
   'url': 'http://127.0.0.1/test?a=1&b=2',
})
print t.render(c)

بعد تقديمه ينتج: http://127.0.0.1/test?a=1&b=2

لاحظ أن ampersand هو HTML مشفرة على أنها "&". تتمثل إحدى الطرق حول المشكلة في تمرير كل معلمة بشكل منفصل إلى القالب الخاص بي وبناء عنوان URL في القالب ، ومع ذلك أود تجنب القيام بذلك.

هل هناك طريقة لتعطيل تشفير HTML لمعلمات السياق أو على الأقل تجنب ترميز ampersands؟

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

المحلول

لإيقاف تشغيله لمتغير واحد ، استخدم mark_safe:

from django.utils.safestring import mark_safe

t = loader.get_template("sometemplate")
c = Context({
   'foo': 'bar',
   'url': mark_safe('http://127.0.0.1/test?a=1&b=2'),
})
print t.render(c)

بدلاً من ذلك ، لإيقاف التشغيل تمامًا من رمز Python الخاص بك ، استخدم ال autoescape الحجة عند تهيئة أ Context:

c = Context({
   'foo': 'bar',
   'url': 'http://127.0.0.1/test?a=1&b=2',
}, autoescape=False)

ال كيفية تشغيل [هروب HTML التلقائي] قبالة يغطي قسم الوثائق بعض الخيارات الموجودة في العلم إذا كنت تفضل القيام بذلك هناك.

نصائح أخرى

أو مجرد استخدام مرشح "آمن" في القالب الخاص بك.

أيضًا ، لا يمكنني التأكيد بما فيه الكفاية على مدى أهمية أن أكون على دراية بوثائق Django ؛ العديد من الأسئلة الشائعة مثل هذه لها إجابات وتفسيرات سهلة الثقة (مثل هذه) ، وقراءة المستندات والإحساس بكيفية عمل كل شيء ، سوف يقلل بشكل كبير من الوقت الذي تحتاجه لإنفاقه "لماذا فعلت ذلك" وزيادة مقدار الوقت الذي تقضيه في بناء الأشياء التي تعمل بالطريقة التي تريدها .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top