জিনজা 2-এ আপনি কীভাবে একটি তালিকা সাজান?


90

আমি এটি করার চেষ্টা করছি:

 {% for movie in movie_list | sort(movie.rating) %}

তবে এটি ঠিক নয় ... ডকুমেন্টেশনটি অস্পষ্ট ... আপনি জিনজা 2 এ এটি কীভাবে করবেন?

উত্তর:


172

সংস্করণ ২.6 অনুসারে, জিনজা ২ এর অন্তর্নির্মিত বাছাই করা ফিল্টার আপনাকে এর দ্বারা বাছাই করার জন্য একটি বৈশিষ্ট্য নির্দিষ্ট করতে দেয়:

{% for movie in movie_list|sort(attribute='rating') %}

Http://jinja.pocoo.org/docs/templates/#sort দেখুন


ধন্যবাদ, এটাই আমি চেয়েছিলাম যাইহোক, এটি উভয় ধরণের অ্যাট্রিবিউটগুলির সাথে কাজ করে ... আপনি getattr এবং getitem জানেন ? (কারণ "চলচ্চিত্রগুলি" বস্তু বা অভিধান ছিল কিনা তা আমি মনে করতে পারি না)
— নিক পার্কিনস

@ নিক: আমি একটি দ্রুত পরীক্ষা করেছি এবং দেখে মনে হচ্ছে এটি উভয় বস্তু এবং ডিক্টের সাথে কাজ করে।
— স্টিভ এস

4
দুর্দান্ত, এটি একটি টিপল সূচকটির জন্যও কাজ করে:list_of_tuples|sort(attribute='0')
— নবীন

বিপরীত ক্রমে মানগুলি প্রদর্শন করা সহজ হতে পারে (যেমন রেটিংগুলির জন্য এটি আকর্ষণীয় হতে পারে), এক্ষেত্রে কেবল বিকল্পটি ব্যবহার করুন reverse=True।
— রোমেন

26

আপনি যদি আরোহী ক্রম অনুসারে বাছাই করতে চান

{% for movie in movie_list|sort(attribute='rating') %}

আপনি যদি উতরান ক্রম অনুসারে বাছাই করতে চান

{% for movie in movie_list|sort(attribute='rating', reverse = True) %}

14

সাধারণত আমরা জিনজা 2 এ দেওয়ার আগে তালিকাটি সাজান। জিনজার মধ্যে কোনও কী নির্দিষ্ট করার উপায় নেইsort ফিল্টারে ।

তবে, আপনি সর্বদা চেষ্টা করতে পারেন {% for movie in movie_list|sort %}। এটাই সিনট্যাক্স। আপনি বাছাইয়ের জন্য কোনও ধরণের কী তথ্য সরবরাহ করতে পারবেন না।

আপনি এটির জন্য একটি কাস্টম ফিল্টার চেষ্টা করেও লিখতে পারেন। আপনি জিনজা 2 তে ডেটা দেওয়ার আগে বাছাই করতে পারলে নির্বোধ মনে হয়।

তাহলে movie_listবস্তুর একটি তালিকা রয়েছে, তাহলে আপনি বিভিন্ন তুলনা পদ্ধতি (বর্ণনা করতে পারেন __lt__, __gt__যারা বস্তুর বর্গ জন্য, ইত্যাদি)।

যদি movie_listটিপলস বা তালিকার একটি তালিকা হয় তবে রেটিংটি প্রথম হওয়া উচিত। অথবা আপনাকে জিনজা 2 এর বাইরে বাছাই করতে হবে।

যদি movie_listঅভিধানগুলির একটি তালিকা থাকে তবে আপনি ব্যবহার করতে পারেন dictsortযা বাছাইয়ের জন্য কোনও মূল স্পেসিফিকেশন গ্রহণ করে। এটি পড়ুন: http://jinja.pocoo.org/2/docamentation/templates#dictsort উদাহরণের জন্য।


ঠিক আছে ধন্যবাদ. টেমপ্লেট পাঠানোর আগে আমি পাইথনে বাছাই শেষ করেছি: <কোড> মুভি_লিস্ট = সাজানো (মুভি_লিস্ট, কী = ল্যাম্বদা মুভি: মুভি.রেটিং, রিভার্স = ট্রু) সাজানোর অর্ডারে! (অন্যান্য টেম্পলেট ইঞ্জিনগুলি কি এটি করতে পারে?)
— নিক পার্কিনস

4
জিনজা 2 এর সাম্প্রতিক সংস্করণগুলি এখন কোনও বৈশিষ্ট্য অনুসারে বাছাই করার অনুমতি দেয়।
— স্টিভ এস

4
@ স্টিভ এস: আকর্ষণীয়। আপনি কি আপনার নতুন তথ্য সহ একটি উত্তর পোস্ট করতে পারেন ? দয়া করে সংস্করণ নম্বর অন্তর্ভুক্ত করুন।
— এস .লট

4
ছোট সংশোধন: উত্সটি যাচাই করার পরে আমি জানতে পেরেছি যে আপনার তালিকাটি টিপলস (যেমন ফেরত দেওয়া dict.items()) দ্বারা তৈরি হয়ে থাকে তবে যদি একটি সূচক নির্দিষ্ট করা সম্ভব হয় :sort(attribut='1')
— লুকাস সিমন

@ এস্লট - টেমপ্লেটে বাছাইয়ের জন্য ব্যবহারের ক্ষেত্রে হ'ল: এটি প্রদর্শন স্তর - একই ডেটার একাধিক মতামত উপস্থাপন করতে সক্ষম - এগুলি দুটি পৃথক দল হতে পারে। কেন আবার ডিসপ্লে লেয়ারে এই কাজটি করবেন না? উদ্বেগের মিলন ভাঙ্গার জন্য ভাল জায়গা বলে মনে হচ্ছে।
— শেন সি ম্যাসন 21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.