জিনজা পাইথন টেমপ্লেটে কমা সীমিত তালিকা আউটপুট করবেন কীভাবে?


178

যদি আমি একটি তালিকা আছে usersবলে ["Sam", "Bob", "Joe"], আমি কিছু করতে চাই যেখানে আমি আমার Jinja টেমপ্লেট ফাইলে আউটপুট যা করতে পারেন:

{% for user in userlist %}
    <a href="/profile/{{ user }}/">{{ user }}</a>
    {% if !loop.last %}
        , 
    {% endif %}
{% endfor %}   

আমি আউটপুট টেম্পলেটটি করতে চাই:

Sam, Bob, Joe

আমি উপরের কোডটি লুপের শেষ পুনরাবৃত্তিতে ছিল কিনা তা যাচাই করার জন্য চেষ্টা করেছিলাম এবং যদি না হয়, তবে কমা don'tোকাবেন না, তবে এটি কার্যকর হয় না। আমি এটা কিভাবে করবো?


জিনজা, পাইথনের মতো, !নেগেটিশন অপারেটর হিসাবে ব্যবহার করে না । "not" এর বানান "not" হয়।
উবল

উত্তর:


305

আপনি নিজের ifচেকটি চান :

{% if not loop.last %}
    ,
{% endif %}

মনে রাখবেন আপনি যদি এক্সপ্রেশন ব্যবহার করে কোডটি ছোটও করতে পারেন :

{{ "," if not loop.last }}

2
এটি দুর্দান্ত, বিশেষত এইচটিএমএল-এর লুপের শেষে
সিনাক্স

7
কেবলমাত্র, আপনার সেটিংসের উপর ভিত্তি করে আপনার যদি এটি তৈরি করার প্রয়োজন হতে পারে। অধিক তথ্য. এখানে পাওয়া যাবে: github.com/pallet/jinja/issues/710
পল ক্যালাব্রো

1
বা কিছু ক্ষেত্রে{{ "," if not forloop.last }}
obotezat

5
আমি অন্য একটি যুক্ত সম্পর্কে মন্তব্য দ্বিতীয়। এটি আমার পক্ষে কাজ করেছিল{{ "," if not loop.last else "" }}
অহং

197

আপনি অন্তর্নির্মিত "যোগদান" ফিল্টারও ব্যবহার করতে পারেন ( http://jinja.pocoo.org/docs/templates/# এইভাবে যোগ দিন :

{{ users|join(', ') }}

1
যদিও এটি সিএসভি তৈরির জন্য কাজ করে, উপরের তার উদাহরণটি দেখে এটি আশেপাশের অ্যাঙ্কারের সাথে ব্যবহার করা যাবে না।
ত্রিউণ প্রকৃতি

এই পন্থাটি পলায়নের সাথেও ভাল কাজ করে না: ['{{[' a \ '', 'বি'] | জয়েন ("','")}} '] উত্পাদন করে [' a & # 39; & # 39; , & # 39; বি ']
স্টুবাসিক

6
এটি প্রথম জিনিস চেষ্টা করা উচিত। যদি এটি পছন্দসই কাজ না করে, তবে অন্য একটি সমাধান চেষ্টা করুন, তবে এটি অবশ্যই সবচেয়ে পরিষ্কার।
জেরাদ

এটি একটি পিছনে কমা দেয়, আমি কীভাবে এ থেকে মুক্তি পাব?
জোনাথন

আপনার কাছে সম্ভবত একটি পিছনের খালি উপাদান রয়েছে। আপনি যদি তিনটি উপাদান এ.বি.সি পেয়ে থাকেন তবে এক্স এর সাথে যোগদানের সময় আপনি এক্সএক্সএক্সএক্স পাবেন:ansible -i localhost, all -m debug -a "msg=\"{{ [ 'a','b','c' ]|join('X') }}\""
উলি মার্টেনস

61

এবং http://jinja.pocoo.org/docs/dev/templates/#joinerjoiner থেকে ব্যবহার করুন

{% set comma = joiner(",") %}
{% for user in userlist %}
    {{ comma() }}<a href="/profile/{{ user }}/">{{ user }}</a>
{% endfor %}  

এটি এই সঠিক উদ্দেশ্যে তৈরি করা হয়েছে। সাধারণত একটি যুক্ত বা ফরলুপ.লাস্টের একটি চেক একক তালিকার জন্য যথেষ্ট, তবে একাধিক দলের জন্য এটি কার্যকর।

আপনি কেন এটি ব্যবহার করবেন তার আরও জটিল উদাহরণ।

{% set pipe = joiner("|") %}
{% if categories %} {{ pipe() }}
    Categories: {{ categories|join(", ") }}
{% endif %}
{% if author %} {{ pipe() }}
    Author: {{ author() }}
{% endif %}
{% if can_edit %} {{ pipe() }}
    <a href="?action=edit">Edit</a>
{% endif %}

1
এটি আসলে আমার জন্য খুব ভালভাবে কাজ করেছিল, কোনও পেছনের কমা না রেখে। এই এক জন্য ধন্যবাদ!
ড্যানিয়েল আন্দ্রে মিনসি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.