سؤال

أنا رجل PHP في أول يوم لي في Python-land، وأحاول تحويل موقع PHP إلى python (تجربة تعليمية)، وأنا أتألم للحصول على النصيحة.لم أعتقد أبدًا أنه سيكون من الصعب جدًا استخدام المصفوفات أو القواميس متعددة الأبعاد كما تسميها البايثون.

حتى أتمكن من إنشاء صفائف متعددة الأبعاد باستخدام هذا, ، لكن لا يمكنني تكراره في قالب جانغو. هذا لا يعمل ولكني أتخيل أنني لا أستطيع تكراره إذا كان بإمكاني تشغيله.

{% for key,val in dictionary.items %}

يبدو أنه يعمل فقط مع القواميس الفعلية، وليس مع فئات القاموس متعددة الأبعاد.

أقوم بإنشاء القاموس الخاص بي من استعلام SQL:

vid[ video[ 7 ] ][ 'cat_short_name' ] = video[ 2 ]
vid[ video[ 7 ] ][ 'cat_name' ] = video[ 1 ]
vid[ video[ 7 ] ][ 'cat_id' ] = video[ 7 ]

vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'comp_short_name' ] = video[ 5 ]
vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'comp_name' ] = video[ 4 ]
vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'comp_website' ] = video[ 6 ]

vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'videos' ][ video[ 8 ] ][ 'top_video' ] = 0
vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'videos' ][ video[ 8 ] ][ 'vid_id' ] = video[ 8 ]
vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'videos' ][ video[ 8 ] ][ 'vid_name' ] = video[ 9 ]
vid[ video[ 7 ] ][ 'companies' ][ video[ 14 ] ][ 'videos' ][ video[ 8 ] ][ 'vid_url' ] = video[ 10 ]

أحتاج بشكل أساسي إلى الحصول على جميع الشركات في فئة معينة ثم الحصول على جميع مقاطع الفيديو الخاصة بتلك الشركة حتى أتمكن من دمجها بسهولة في القالب الخاص بي.هذه هي الطريقة التي فعلت بها ذلك في لغة php، مما أدى إلى إنشاء مجموعة عميقة ضخمة.لقد ثبت أن محاولة التكرار في بايثون أمر صعب.

اعتقدت أنه ربما يمكنني إجراء عمليات البحث العكسية في Django باستخدام set_MODEL ولكن لم أتمكن من معرفة ذلك أيضًا.

سيكون موضع تقدير أي مساعدة حول كيفية تحقيق هدفي.آمل أن يكون سؤالي واضحا

يحرر:

عندما انتهيت من التكرار في القالب الخاص بي يبدو مثل هذا ...

<h1>Category</h1>
   <h2>Company</h2>
   <ul>
        <li>video</li>
    </ul>
    <h2>Company</h2>
    <ul>
        <li>video</li>
        <li>video</li>
    </ul>
<h1>Category</h1>
   <h2>Company</h2>
   <ul>
        <li>video</li>
    </ul>
    <h2>Company</h2>
    <ul>
        <li>video</li>
        <li>video</li>
    </ul>
هل كانت مفيدة؟

المحلول

يجب أن تستخدم المدمج في ORM بدلاً من استخدام الاستعلامات الخاصة بك (على الأقل لشيء بسيط مثل هذا)، يجعل الأمور أسهل بكثير (على افتراض أنك قمت أيضًا ببناء نماذجك في ملفmodels.py الخاص بك)

في وجهة نظرك:

def categories_view(request):
    categories = Categories.objects.all()   #maybe put an order_by or filter here
    return render_to_response("your_template.html", {'categories':categories})

في القالب الخاص بك:

{% for category in categories %}
    <h1>{{ category.name }}</h1>
    {% for company in category.company_set.all %}
        <h2>{{ company.name }}</h2>
        <ul>
        {% for video in company.video_set.all %}
            <li>{{ video.name }}</li>
        {% endfor %}
        </ul>
    {% endfor %}
{% endfor %}

لم أختبره ولكن يجب أن يعمل.قارن هذا الكود بما كان عليك كتابته إذا لم تكن تستخدم ORM، سواء في PHP أو Python.

قم بإلقاء نظرة على مستندات Django لمزيد من المعلومات، أوصي بأخذ بضع ساعات والقيام بالأمر درس تعليمي.

تحديث: تم تعديل الكود لاستخدام "_set.all"

نصائح أخرى

عند الانتقال من لغة واحدة أو إطار عمل لآخر، كنت بحاجة إلى أن ندرك أنه ليس من عادة ما تكون فكرة جيدة لكتابة التعليمات البرمجية الخاصة بك تماما بنفس الطريقة، حتى إذا كنت تستطيع.

وعلى سبيل المثال:

<اقتباس فقرة>   

وأنا خلق قاموسي من استعلام SQL

لماذا تفعلون هذا؟ الطريق لتمثيل الكائنات من قاعدة بيانات في جانغو هو استخدام نموذج. سوف تأخذ الرعاية من مجموعة كبيرة من الاشياء بالنسبة لك، بما في ذلك SQL ولكن سوف يساعد أيضا مع بالتكرار عبر الجداول ذات الصلة.

وأنا أيضا مبتدئا جانغو ...

ويجب أن تكون قادرة على عش لحلقات للحصول على شيء من هذا القبيل:

{% for key,val in dictionary.items %}
    {% for key,val in val.items %}

ووهلم جرا.

إذا بنيت القاموس معقدة بالطريقة التالية:

vid[ video[ 7 ], 'cat_short_name' ] = video[ 2 ]
vid[ video[ 7 ], 'cat_name' ] = video[ 1 ]
vid[ video[ 7 ], 'cat_id' ] = video[ 7 ]

vid[ video[ 7 ], 'companies', video[ 14 ], 'comp_short_name' ] = video[ 5 ]

وغيرها، والتي من شأنها أن تساعد؟ ان المفتاح في هذه الحالة أن تكون الصفوف (tuple) (مع البنود 2 في الحالات الثلاث الأولى، و 4 أصناف في الرابعة)، وأنا لست متأكدا من تقصد لعلاج ذلك، ولكن حلقة على العناصر للحصول على مفتاح وقيمة، في حد ذاته، يجب أن تعمل بشكل جيد.

و

{% for key, val in vid.items %}
    <h1>{{ val.cat_name }}</h1>
    {% for k2, v2 in val.companies.items %}
        <h2>{{ v2.comp_name }}</h2>
        <ul>
        {% for k3, v3 in v2.videos.items %}
            <li>{{ v3.vid_name }}</li>
        {% endfor %}
        </ul>
    {% endfor %}
{% endfor %}

و

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top