python - ماكو أو جينجا 2؟



templates template-engine mako jinja2 (3)

لم أجد مقارنة جيدة بين jinja2 و Mako. ما الذي ستستخدمه في ما المهام؟

أنا شخصيا كان راضيا عن طريق mako (في سياق تطبيق ويب أبراج) ولكنني أشعر بالفضول لمعرفة ما إذا كان jinja2 لديه بعض الميزات / التحسينات الجيدة التي لا mako؟ أو ربما سلبيات؟


Answers

ألق نظرة على مثال wheezy.template :

@require(user, items)
Welcome, @user.name!
@if items:
    @for i in items:
        @i.name: @i.price!s.
    @end
@else:
    No items found.
@end

هو الأمثل للأداء (أكثر here here ) ، واختبارها بشكل جيد وتوثيقها .


أنا شخصيا أفضّل بناء جينجا 2 على ماكو. خذ هذا المثال من موقع Mako

<%inherit file="base.html"/>
<%
    rows = [[v for v in range(0,10)] for row in range(0,10)]
%>
<table>
    % for row in rows:
        ${makerow(row)}
    % endfor
</table>

<%def name="makerow(row)">
    <tr>
    % for name in row:
        <td>${name}</td>\
    % endfor
    </tr>
</%def>

هناك الكثير من التركيبات التي يجب أن أستشيرها قبل أن أتمكن من البدء. ما هي العلامات التي تبدأ <% وتغلق مع /> ؟ أي من هؤلاء يُسمح له بالإغلاق مع %> ؟ لماذا توجد طريقة أخرى لإدخال لغة القالب عندما أريد إخراج متغير ( ${foo} )؟ ما الأمر مع XML المزيف حيث يتم إغلاق بعض التوجيهات مثل العلامات ولها سمات؟

هذا هو المثال المعادل في Jinja2:

{% extends "base.html" %}

<table>
  {% for row in rows %}
    {{ makerow(row) }}
  {% endfor %}
</table>

{% macro make_row(row) %}
  <tr>
    {% for name in row %}
      <td>{{ name }}</td>    
    {% endfor %}
  </tr>
{% endmacro %}

Jinja2 لديها مرشحات ، والتي أخبرتها بأن Mako بها أيضًا ولكنني لم أرها. لا تعمل وظائف التصفية مثل الوظائف العادية ، ولكنها تأخذ معلمة أولية ضمنية للقيمة التي تتم تصفيتها. هكذا في ماكو قد تكتب:

${escape(default(get_name(user), "No Name"))}

هذا فظيع. في Jinja2 كنت تكتب:

{{ user | get_name | default('No Name') | escape }}

في رأيي ، أمثلة جينجا 2 هي أكثر قابلية للقراءة. جينجا 2 أكثر انتظامًا ، في تلك العلامات تبدأ وتنتهي بطريقة يمكن التنبؤ بها ، إما مع {% %} ٪٪ {% %} لتوجيهات التحكم والتحكم ، أو {{ }} لمتغيرات الإخراج.

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

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


فهم كامل لجميع أنواع البيانات والهياكل

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





python templates template-engine mako jinja2