জিনজা 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.