جانغو ، الرد باستخدام قائمة الإملاء

1

أنا أتطلع لأن أكون قادراً على الرد باستخدام قائمة الإملاء مثل المتابعة

bio_dict = [{'subject' : 'Name', 'value' : 'MyName'},\
    {'subject' : 'Birth Date', 'value' : '1998-1-1'},\
    {'subject' : 'Sex', 'value' : 'M'}]

def index(request):
    response = { bio_dict['subject'] : bio_dict['value'] }
    return render(request, 'page.html', response)

لكن هذا الرد يعود:

TypeError: list indices must be integers or slices, not str

باستخدام python 3.6 و django 1.11

4 الاجابة

0

حاول أن تمر فقط dict بدلا من المفتاح والقيم الكاملة. انظر المتغيرات وعمليات البحث

bio_dict = {
              'name' : 'MyName', 
              'birth_date': '1998-1-1',
              'sex' : 'M'
           }

def index(request):
    response = { bio_dict: 'bio_dict' }
    return render(request, 'page.html', response)

وفي صفحة page.html ، لتقديم القيمة في قالب html ، استخدم:

{% for my_key, my_value in bio_dict.items %}

  <p> {{ my_key }} : {{ my_value }} </p>

{% endfor %}
:مؤلف
0

كما ذكر سلفا، bio_dict هي قائمة وليست قاموسًا. إذا كنت تريد إنشاء إملاء سياق response لرأيك ، يمكنك القيام بذلك كما يلي:

bio_dict = [{'subject' : 'Name', 'value' : 'MyName'},\
{'subject' : 'Birth Date', 'value' : '1998-1-1'},\
{'subject' : 'Sex', 'value' : 'M'}]
def index(request):
   response = {}
   for item in bio_dict:
        # populate response = {}
        response[item['subject']] = item['value']
   return render(request, 'page.html', response)
:مؤلف
0

لذا إذا نظرت إليها bio_dict ، وهي قائمة ، وكما يقول الاستثناء ، يجب أن تكون مؤشرات القائمة أعدادًا صحيحة أو شرائح.

عن طريق القيام - bio_dict['subject'] كنت تقوم بتمرير سلسلة أساسا فهرس القائمة.

ستحتاج أولاً إلى الوصول إلى القائمة مثل -

bio_dict[0] وبذلك ، ستتمكن من الوصول إلى القواميس التي تحتوي عليها القائمة.

وبما أن هناك ثلاثة أوامر في القائمة ، bio_dict[0] سيعطيك الإملاء الأول وهو -

{'subject' : 'Name', 'value' : 'MyName'

و bio_dict[1] سيعطيك الإملاء الثاني وهو -

{'subject' : 'Birth Date', 'value' : '1998-1-1'}

وما إلى ذلك وهلم جرا.

يمكنك الوصول إلى عناصر الإملاء بواسطة -

bio_dict[0]['subject']

وما إلى ذلك وهلم جرا.

اعتمادًا على حالة الاستخدام ، يمكنك استخدام حلقة مثل -

for dict in list:
    for key, value in dict.iteritems():
    # do something with key or value
:مؤلف
0

الخطأ يأتي من حقيقة أن تتصل

bio_dict['subject'] and bio_dict['value']

لكن bio_dict هي قائمة. هذه هي الصيغة للوصول إلى قاموس وليس قائمة.

الآن ، من أجل الحصول على ناتج كما تريد ، يمكنك استخدام فهم الإملاء مثل ذلك ،

response = {item['subject']:item['value'] for item in bio_dict} 

وبهذه الطريقة لديك بنية مماثلة لما حاولت ، ولكنك الآن تتكرر في كل إملاء bio_dict والوصول إليها بدلاً من ذلك.

:مؤلف
فوق
قائمة طعام