سؤال

أنا باستخدام أبراج مع ماكو قوالب أريد أن تجنب كتابة هذا في كل وقت:

${ h.some_function_that_outputs_html() | n }

أريد أن بطريقة ما علامة دالة أو متغير آمنة (يمكنك أن تفعل ذلك في جانغو) لذا لا يجب أن الأنابيب-en طوال الوقت.أي أفكار ؟

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

المحلول

أنا فقط وجدت أن إذا وضعت html طريقة في صفك ، ثم ماكو فقط استدعاء هذا الأسلوب والإخراج مهما كان يعود في القالب.

لذلك لم:

def __html__(self):
    return unicode(self)

هذا هو أساسا ما ساعة.الحرفي لا.

نصائح أخرى

ووفقا ل ماكو مستندات حول تصفية ، يمكنك تعيين المرشحات الافتراضية التي يتم تطبيقها داخل قوالب عند إنشاء Template الجديدة وكذلك لTemplateLookup (في هذه الحالة هذا ينطبق بشكل افتراضي لجميع القوالب التي يبدو متابعة)، مع حجة default_filters.

يستخدم

وأبراج هذه الحجة مع TemplateLookup لضبط الإعدادات الافتراضية للمشروع الخاص بك داخل ملف config/environment.py:

# Create the Mako TemplateLookup, with the default auto-escaping
config['pylons.app_globals'].mako_lookup = TemplateLookup(
    directories=paths['templates'],
    error_handler=handle_mako_error,
    module_directory=os.path.join(app_conf['cache_dir'], 'templates'),
    input_encoding='utf-8', default_filters=['escape'],
    imports=['from webhelpers.html import escape'])

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

ويمكنك أيضا تمرير سلسلة "وضع علامة آمن بأنه" مع مساعد h.literal أبراج، على سبيل المثال إذا كنت تمر h.literal('This will <b>not</b> be escaped') إلى القالب، ويقول كمتغير اسمه spam، هل يمكن أن مجرد استخدام ${spam} دون أي الهرب.

إذا كنت تريد نفس التأثير عند استدعاء وظيفة معينة من داخل القالب، سوف تحتاج هذه الوظيفة في العودة مثل حرفي، أو تقديم المساعدة لتلك الوظيفة التي تدعو h.literal على النتيجة إذا كنت تريد أن تترك الأصلي تعمل وحدها. (أو اعتقد انك يمكن أن نسميها أيضا عبر "مواطنه تصفية" (انظر نفس ثيقة ماكو النحو الوارد أعلاه)، لم جربت ذلك حتى الآن)

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