Jinja: تنفيذ مساعد القالب المدمج لتفريغ متغيرات القالب المتاحة

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

يحتوي محرك قالب Smarty على {debug} مدمج ملائم للغاية يوفر نظرة عامة سريعة على المتغيرات المتاحة للمصمم.

Smarty_debug_console

سيكون من الجيد أن يكون لديك نفس الأشياء في Jinja2 افتراضيًا

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

image

كما طلب. ستلاحظ أن المحتويات تم تنظيمها (وفرزها) حسب متغيرات السياق والفلاتر والاختبارات. أيضًا ، يوجد هنا عرض مكبّر على شاشة مع عدد قليل من متغيرات السياق "الشيقة". انظر كيف أن الحد الأقصى للعمق = 3 كافٍ لإظهار القليل من التفاصيل ، دون تكبد احتمال وجود مخرجات متداخلة بشكل مفرط ، حيث أعتقد أن الشيء الأكثر طلبًا هو معرفة متغيرات السياق (المستوى الأعلى) الموجودة بالضبط وليس متغيرات السياق العمق الكامل لأي هياكل:

image

من المحتمل أيضًا أن ترى أنه من التافه تغيير / توسيع تفاصيل ما يتم عرضه (أو سيكون كذلك ، بالنسبة لشخص يعرف كيف يعمل المحلل اللغوي ... لست في تلك الدائرة المباركة :-)).

ال 16 كومينتر

يجب أن أتحقق ، لكن أعتقد أن هذا يجب أن ينجح:

<h2>locals()</h2>
<pre>{{ locals() }}</pre>
<h2>globals()</h2>

... https://stackoverflow.com/questions/3398850/how-to-get-a-list-of-current-variables-from-jinja-2-template

mitsuhiko من https://stackoverflow.com/a/13757358/188833 :

import jinja2

@jinja2.contextfunction
def get_context(c):
 return c

app.jinja_env.globals['context'] = get_context
app.jinja_env.globals['callable'] = callable

لتصحيح الأخطاء ، على سبيل المثال ، يمكن لـ pyramid_debugtoolbar إظهار سياق القالب إذا كانت وظيفة العرض - IMHO الملخصة بشكل مناسب - تقوم فقط بإرجاع كائن سياق (على سبيل المثال ، ديكت ، OrderedDict)

حالة الاستخدام

حالة الاستخدام الخاصة بي هنا هي تمرير بعض الوسائط من أداة CLI المساعدة إلى قالب jinja2 (حيث أود تحديد الإعدادات الافتراضية داخل القالب (على سبيل المثال لملفات Dockerfiles (بدون autoescape ، من بين كل الأشياء))

ما أود فعله هو

{% set ENVVAR=context.get('ENVVAR', 'DEFAULT') %}

ولكن ، للأسف ، الكائن الفعلي context هو [...]

westurner ، فهل يعمل؟ لا يمكنني التحقق من ذلك الآن ، ولكن يبدو لي أن {{ locals() }} يجب أن يفشل إذا كان يحتوي على وحدات بايت غير قابلة للتحويل.

  • لن يعمل json.dumps(locals()) بدون JSONEncoder مخصص (على سبيل المثال repr() لـ [كائنات التعليمات البرمجية ،])
  • ربما pprint.pformat(locals()) ؟ (سيكون هذا مدمجًا مناسبًا)
  • ... autoescape=True سيمنع إذن XSS

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

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

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

{% extends "!layout.html %}

{# ... or any other sensible name #}
{% dump_variables() %}

{% block body %}
Hello World!
super()
Goodbye World
{% endblock %}

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

لقد أنشأت امتدادًا لهذا الغرض ، ويمكن العثور عليه على https://github.com/niwinz/django-jinja/files/1607805/jinja_extensions.py.txt

ShaheedHaque أي شاشات؟

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

في 6 يناير 2018 02:23 ، كتب "anatoly techtonik" [email protected] :

ShaheedHaque https://github.com/shaheedhaque اي شاشات؟

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/pallets/jinja/issues/174#issuecomment-355716273 ، أو كتم الصوت
الخيط
https://github.com/notifications/unsubscribe-auth/AEp7KdBBslHJPIGp5VliuF74bxSZTk-wks5tHtkEgaJpZM4AXefd
.

ستكون شاشة ShaheedHaque رائعة حقًا مقارنة بإخراج Smarty من المنشور الأول.

image

كما طلب. ستلاحظ أن المحتويات تم تنظيمها (وفرزها) حسب متغيرات السياق والفلاتر والاختبارات. أيضًا ، يوجد هنا عرض مكبّر على شاشة مع عدد قليل من متغيرات السياق "الشيقة". انظر كيف أن الحد الأقصى للعمق = 3 كافٍ لإظهار القليل من التفاصيل ، دون تكبد احتمال وجود مخرجات متداخلة بشكل مفرط ، حيث أعتقد أن الشيء الأكثر طلبًا هو معرفة متغيرات السياق (المستوى الأعلى) الموجودة بالضبط وليس متغيرات السياق العمق الكامل لأي هياكل:

image

من المحتمل أيضًا أن ترى أنه من التافه تغيير / توسيع تفاصيل ما يتم عرضه (أو سيكون كذلك ، بالنسبة لشخص يعرف كيف يعمل المحلل اللغوي ... لست في تلك الدائرة المباركة :-)).

تبدو مفيدة. فلماذا لا تملأ العلاقات العامة؟

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

أنا كذلك ، ولكن يبدو أن https://github.com/pallets/jinja/blob/master/jinja2/ext.py بداية جيدة.

انظر PR # 798.

سيكون متاحًا كملحق جديد في 2.11.

شكرا!

يجب أن تحذر مستندات ملحق تصحيح الأخطاء المستخدمين بشأن ما هو غير مقصود
الكشف عن المعلومات الحساسة
من خلال علامة {% debug %} ، وكيفية تحديد ما إذا كان الامتداد أم لا
ممكَّن (حتى يتمكن المحلل الثابت من التعرف على شخص نسي ذلك
إزالة {% debug .* %} قبل الإصدار.

983

في يوم الجمعة 4 أكتوبر 2019 ، كتب David Lord [email protected] :

مغلق # 174.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو اعرضها على GitHub ، أو قم بكتم صوت الموضوع.

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

القضايا ذات الصلة

hvnsweeting picture hvnsweeting  ·  4تعليقات

jp-costa picture jp-costa  ·  5تعليقات

AMDmi3 picture AMDmi3  ·  4تعليقات

DriverX picture DriverX  ·  4تعليقات

guettli picture guettli  ·  5تعليقات