জ্যাঙ্গো টেমপ্লেটে কোনও অভিধানে অভিধানের মাধ্যমে পুনরাবৃত্তি কীভাবে?


128

আমার অভিধানটি এর মতো দেখাচ্ছে (অভিধানের মধ্যে অভিধান):

{'0': {
    'chosen_unit': <Unit: Kg>,
    'cost': Decimal('10.0000'),
    'unit__name_abbrev': u'G',
    'supplier__supplier': u"Steve's Meat Locker",
    'price': Decimal('5.00'),
    'supplier__address': u'No\r\naddress here',
    'chosen_unit_amount': u'2',
    'city__name': u'Joburg, Central',
    'supplier__phone_number': u'02299944444',
    'supplier__website': None,
    'supplier__price_list': u'',
    'supplier__email': u'ss.sss@ssssss.com',
    'unit__name': u'Gram',
    'name': u'Rump Bone',
}}

এখন আমি কেবলমাত্র আমার টেম্পলেটটিতে তথ্য প্রদর্শন করার চেষ্টা করছি তবে আমি লড়াই করছি। টেমপ্লেটের জন্য আমার কোডটি দেখতে এমন দেখাচ্ছে:

{% if landing_dict.ingredients %}
  <hr>
  {% for ingredient in landing_dict.ingredients %}
    {{ ingredient }}
  {% endfor %}
  <a href="/">Print {{ landing_dict.recipe_name }}</a>
{% else %}
  Please search for an ingredient below
{% endif %}

এটি আমার টেম্পলেটটিতে কেবল আমাকে '0' দেখায়?

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

{% for ingredient in landing_dict.ingredients %}
  {{ ingredient.cost }}
{% endfor %}

এটি কোনও ফলাফলও প্রদর্শন করে না।

আমি ভেবেছিলাম সম্ভবত আমাকে আরও একটি স্তর পুনরাবৃত্তি করতে হবে তাই এটি চেষ্টা করুন:

{% if landing_dict.ingredients %}
  <hr>
  {% for ingredient in landing_dict.ingredients %}
    {% for field in ingredient %}
      {{ field }}
    {% endfor %}
  {% endfor %}
  <a href="/">Print {{ landing_dict.recipe_name }}</a>
{% else %}
  Please search for an ingredient below
{% endif %}

তবে এটি কিছুই প্রদর্শন করে না।

আমি কি ভুল করছি?

উত্তর:


258

আপনার ডেটা হ'ল বলুন -

data = {'a': [ [1, 2] ], 'b': [ [3, 4] ],'c':[ [5,6]] }

data.items()অভিধানের উপাদানগুলি পেতে আপনি পদ্ধতিটি ব্যবহার করতে পারেন । দ্রষ্টব্য, জ্যাঙ্গো টেম্পলেটগুলিতে আমরা রাখি না ()। এছাড়াও উল্লিখিত কিছু ব্যবহারকারী values[0]কাজ করে না, যদি এটি হয় তবে চেষ্টা করুন values.items

<table>
    <tr>
        <td>a</td>
        <td>b</td>
        <td>c</td>
    </tr>

    {% for key, values in data.items %}
    <tr>
        <td>{{key}}</td>
        {% for v in values[0] %}
        <td>{{v}}</td>
        {% endfor %}
    </tr>
    {% endfor %}
</table>

আমি নিশ্চিত যে আপনি এই যুক্তিটি আপনার নির্দিষ্ট ডিকটিতে প্রসারিত করতে পারবেন।


সাজানো ক্রমে ডিক কীগুলির মাধ্যমে পুনরাবৃত্তি করতে - প্রথমে আমরা পাইথনে বাছাই করি তারপরে পুনরাবৃত্তি করুন এবং জ্যাঙ্গো টেমপ্লেটে রেন্ডার করুন।

return render_to_response('some_page.html', {'data': sorted(data.items())})

টেমপ্লেট ফাইলে:

{% for key, value in data %}
    <tr>
        <td> Key: {{ key }} </td> 
        <td> Value: {{ value }} </td>
    </tr>
{% endfor %}

2
আপনার উত্তরের জন্য ধন্যবাদ. আমার রেসিপি_নামটি এক স্তর পর্যন্ত আছে এবং অভিধানের সেই স্তরটি দেখায় না। আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ! আমি তার values[0]পরিবর্তে আমাকে ব্যবহার করতে পারিনিvalues.items
দারেন

শান্ত! আমি জানতাম কি ভাগ করে খুশি। কোডটি ফ্রি হ্যান্ড টাইপ করা হয়েছিল, তাই কিছু ভুল অবশ্যম্ভাবী।
শ্রীকর অপালরাজু

1
উল্লেখ করার জন্য ধন্যবাদ .items। ডকুমেন্টেশন https://docs.djangoproject.com/en/1.4/topics/templates/একটি উদাহরণ দেয় যা কাজ করে না, তবে কোনও উদাহরণ কাজ করে না। {% for k,v in dict %}উদ্ভট ফলাফল দেয় - কে প্রতিটি কী এর প্রথম চরিত্র এবং v ফাঁকা, {% for k in dict %}পুরো কীটি ফিরিয়ে দেয় তবে মানগুলি পুনরুদ্ধার করার কোনও উপায় ছাড়াই (যেহেতু dict.kকে আক্ষরিক চরিত্র হিসাবে আচরণ করে)।
ডেভ

2
আপভোটড :-)। ভবিষ্যতের পাঠকদের জন্য, ট্যাগগুলি এবং ফিল্টারগুলি রেফারেন্স https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#forডকুমেন্টগুলি সহ, ফর্মলুপ ভেরিয়েবলগুলির সাথে যা তালিকা ফর্ম্যাট করার সময় সহায়ক হতে পারে।
ডেভ

1
values.items+1
কেভিন_এ

3

এই উত্তরটি আমার পক্ষে কার্যকর হয়নি তবে আমি উত্তরটি নিজেই খুঁজে পেয়েছি। তবে কেউই আমার প্রশ্ন পোস্ট করেনি। আমি এটি জিজ্ঞাসা করতে এবং তার উত্তর দিতে খুব অলস, তাই এটি এখানে এখানে রাখব।

এটি নিম্নলিখিত প্রশ্নের জন্য:

data = Leaderboard.objects.filter(id=custom_user.id).values(
    'value1',
    'value2',
    'value3')

টেমপ্লেটে:

{% for dictionary in data %}
  {% for key, value in dictionary.items %}
    <p>{{ key }} : {{ value }}</p>
  {% endfor %}
{% endfor %}

0

যদি আপনি dataকোনও টেমপ্লেটের প্রসঙ্গ হিসাবে কোনও ভেরিয়েবল (অভিধানের প্রকার) পাস করেন তবে আপনার কোডটি এমন হওয়া উচিত:

{% for key, value in data.items %}
    <p>{{ key }} : {{ value }}</p> 
{% endfor %}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.