انتقل إلى المحتوى
مساحة عربية للمعرفة والأدوات اليوميةتعرّف على مواضيع
البرمجة

أساسيات قوالب Flask في تطوير الويب

أبلغ عن هذا المحتوى
في هذه الصفحة
  1. مفهوم القوالب في Flask
  2. هيكلية مجلد القوالب في مشروع Flask
  3. إنشاء القوالب باستخدام Jinja2
  4. طريقة ربط القوالب مع Flask
  5. الوراثة في القوالب Template Inheritance
  6. التعامل مع ملفات القوالب المتعددة
  7. تمرير البيانات إلى القوالب
  8. استخدام الفلاتر Filters في Jinja2
  9. تضمين ملفات CSS وJavaScript في القوالب
  10. التقاط الأخطاء في القوالب
  11. خلاصة جدولية لأنواع الأدوات في قوالب Flask (Jinja2)
  12. تطبيق عملي متكامل
  13. تحسينات SEO باستخدام القوالب
  14. الخاتمة

أساسيات إطار العمل Flask: القوالب

يُعد إطار العمل Flask واحدًا من أشهر أُطُر العمل البرمجية في لغة بايثون لتطوير تطبيقات الويب، حيث يتميز بالبساطة والمرونة والقدرة على التخصيص، مما جعله خيارًا مثاليًا للمطورين الذين يرغبون في بناء تطبيقات ويب خفيفة الوزن وقابلة للتوسع بسهولة. أحد أهم المفاهيم الجوهرية في Flask هو مفهوم القوالب (Templates)، التي تمكّن المطورين من فصل منطق البرمجة عن واجهة المستخدم، مما يسهل عملية التصميم، الإدارة، والتطوير المستقبلي للتطبيقات.

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


مفهوم القوالب في Flask

القوالب هي ملفات HTML تحتوي على تعليمات برمجية يمكن إدخال بيانات متغيرة فيها لتوليد صفحات ويب ديناميكية. عند استخدام Flask، لا يتم كتابة صفحات الويب مباشرة داخل ملفات بايثون، بل يتم إنشاء ملفات القوالب بشكل منفصل باستخدام نظام القوالب Jinja2، والذي يأتي مدمجًا مع Flask.

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


هيكلية مجلد القوالب في مشروع Flask

عند بدء مشروع باستخدام Flask، من الأفضل اتباع هيكلية منظمة للملفات والمجلدات، حيث يُخصص مجلد باسم templates لتخزين جميع ملفات القوالب. يقوم Flask تلقائيًا بالبحث داخل هذا المجلد عند طلب أي قالب لعرضه.

مثال على هيكلية مشروع بسيطة:

csharp
my_flask_app/ │ ├── app.py ├── static/ │ ├── css/ │ ├── js/ │ └── images/ └── templates/ ├── base.html ├── index.html └── about.html
  • app.py: ملف التطبيق الرئيسي.

  • templates/: مجلد القوالب الذي يحتوي على ملفات HTML.

  • static/: مجلد للملفات الثابتة مثل الصور، ملفات CSS، وJavaScript.

هذه الهيكلية تعزز من تنظيم المشروع وتجعل من السهل إدارة الملفات.


إنشاء القوالب باستخدام Jinja2

تعتمد ملفات القوالب في Flask على لغة قوالب Jinja2 التي توفر مجموعة من الأدوات الأساسية لبناء صفحات HTML ديناميكية، من أهمها:

1. المتغيرات Variables

يمكن إدخال المتغيرات من كود البايثون إلى القالب باستخدام الأقواس المعقوفة المزدوجة {{ }}.

مثال:

html
<h1>مرحبًا، {{ username }}!h1>

عند تمرير متغير username من التطبيق إلى القالب، يتم استبداله بالقيمة الفعلية له.

2. التحكم في التدفق Flow Control

– الشروط Conditions

تُستخدم في القوالب للتحكم في عرض أجزاء معينة بناءً على شروط محددة:

html
{% if user.is_authenticated %} <p>مرحبًا بك، {{ user.name }}!p> {% else %} <p>الرجاء تسجيل الدخول.p> {% endif %}

– الحلقات Loops

تستخدم لتكرار عرض مجموعة بيانات:

html
<ul> {% for item in items %} <li>{{ item }}li> {% endfor %} ul>

3. الاستدعاءات Calls والتضمين Includes

يتيح Jinja2 إمكانية إعادة استخدام القوالب أو أجزاء منها باستخدام التضمين:

html
{% include 'header.html' %}

كما يدعم إنشاء قوالب أساسية يمكن للصفحات الأخرى وراثتها باستخدام مفهوم الوراثة (Inheritance) وهو ما سيتم شرحه لاحقًا.


طريقة ربط القوالب مع Flask

في Flask، تُستخدم الدالة render_template لربط ملفات القوالب بالبيانات التي يتم تمريرها من جانب الخادم (Server Side). هذه الدالة تُرسل المحتوى النهائي للعميل (المتصفح).

مثال بسيط على استخدام render_template:

python
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): user = {'username': 'أحمد'} return render_template('index.html', username=user['username']) if __name__ == '__main__': app.run(debug=True)

في المثال أعلاه، يتم إرسال متغير username إلى القالب index.html، حيث يتم عرضه داخل الصفحة باستخدام {{ username }}.


الوراثة في القوالب Template Inheritance

الوراثة في قوالب Flask (المبنية على Jinja2) تعتبر من أقوى الأدوات التي تسهل بناء واجهات متسقة وتسمح بإعادة استخدام الكود بين عدة صفحات.

المفهوم الأساسي

يمكن إنشاء قالب رئيسي (Base Template) يحتوي على الهيكل العام للصفحة مثل رأس الصفحة (Header)، قائمة التنقل (Navbar)، وتذييل الصفحة (Footer). بعدها، يمكن للصفحات الفرعية (Child Templates) وراثة هذا القالب وتحديد المحتوى الخاص بها في مناطق معينة تعرف بـ “Blocks”.

مثال عملي

1. قالب أساسي base.html:

html
html> <html lang="ar"> <head> <meta charset="UTF-8"> <title>{% block title %}عنوان الصفحة{% endblock %}title> <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}"> head> <body> <header> <h1>موقعي الإلكترونيh1> <nav> <a href="/">الرئيسيةa> <a href="/about">حولa> nav> header> <main> {% block content %} {% endblock %} main> <footer> <p>حقوق النشر © 2025p> footer> body> html>

2. قالب فرعي index.html يرث من base.html:

html
{% extends "base.html" %} {% block title %}الصفحة الرئيسية{% endblock %} {% block content %} <h2>مرحبًا بك في الصفحة الرئيسيةh2> <p>هذا نص تعريفي للصفحة.p> {% endblock %}

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


التعامل مع ملفات القوالب المتعددة

في المشاريع الكبيرة، غالبًا ما يحتاج المطور إلى تنظيم القوالب داخل مجلدات فرعية داخل مجلد templates لتسهيل الإدارة.

مثال:

pgsql
templates/ ├── admin/ │ ├── dashboard.html │ └── users.html ├── auth/ │ ├── login.html │ └── register.html └── base.html

عند استدعاء قالب داخل مجلد فرعي، يتم كتابة المسار النسبي للقالب في render_template:

python
return render_template('admin/dashboard.html')

تمرير البيانات إلى القوالب

إلى جانب المتغيرات البسيطة، يمكن تمرير أنواع بيانات معقدة إلى القوالب، مثل القوائم (Lists)، القواميس (Dictionaries)، وحتى الكائنات.

مثال مع قائمة

python
items = ['تفاحة', 'موز', 'برتقال'] return render_template('list.html', items=items)

وفي القالب:

html
<ul> {% for item in items %} <li>{{ item }}li> {% endfor %} ul>

مثال مع قاموس

python
user = {'name': 'علي', 'age': 30, 'city': 'الرياض'} return render_template('profile.html', user=user)

وفي القالب:

html
<p>الاسم: {{ user.name }}p> <p>العمر: {{ user.age }}p> <p>المدينة: {{ user.city }}p>

استخدام الفلاتر Filters في Jinja2

الفلاتر في Jinja2 هي أدوات تُستخدم لتعديل البيانات قبل عرضها في القالب. تُكتب بعد المتغير باستخدام علامة الـ |.

بعض الفلاتر الشائعة

  • {{ name|lower }}: يحول النص إلى أحرف صغيرة.

  • {{ name|upper }}: يحول النص إلى أحرف كبيرة.

  • {{ text|truncate(20) }}: يختصر النص إلى 20 حرفًا.

  • {{ value|default('غير متوفر') }}: يعرض القيمة الافتراضية إذا كانت القيمة فارغة.

مثال عملي:

html
<p>الاسم: {{ user.name|upper }}p> <p>الوصف: {{ description|truncate(50) }}p>

تضمين ملفات CSS وJavaScript في القوالب

يتيح Flask إدارة الملفات الثابتة مثل ملفات CSS وJavaScript باستخدام مجلد static. للربط بينها وبين القوالب يتم استخدام دالة url_for.

مثال داخل ملف قالب HTML:

html
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}"> <script src="{{ url_for('static', filename='js/main.js') }}">script>

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


التقاط الأخطاء في القوالب

نظرًا لأن القوالب تستخدم لغة مخصصة، قد تحدث أخطاء أثناء تنفيذ القالب، مثل نسيان إغلاق قوس {% endif %} أو تمرير متغير غير معرف. يتعامل Flask مع هذه الأخطاء بشكل يسمح برصدها أثناء التطوير من خلال عرض رسالة خطأ واضحة.

لذلك من الأفضل أثناء التطوير استخدام وضع التصحيح (Debug Mode) في Flask:

python
app.run(debug=True)

وهذا يُظهر الأخطاء التفصيلية المتعلقة بالقوالب في المتصفح، مما يساعد في تصحيحها بسرعة.


خلاصة جدولية لأنواع الأدوات في قوالب Flask (Jinja2)

الأداة الوصف مثال
المتغيرات عرض القيم المتغيرة {{ username }}
الشروط تنفيذ محتوى بناءً على شرط {% if logged_in %}مرحبًا{% endif %}
الحلقات تكرار مجموعة عناصر {% for item in list %}{{ item }}{% endfor %}
الوراثة وراثة قالب أساسي مع إمكانية التخصيص {% extends "base.html" %}
التضمين تضمين ملفات قالب فرعية {% include 'header.html' %}
الفلاتر تعديل القيم قبل العرض `{{ name
تعليقات إضافة ملاحظات داخل القالب بدون ظهور في الصفحة {# تعليق هنا #}

تطبيق عملي متكامل

يمكن توضيح الاستخدام الكامل للقوالب في تطبيق Flask بسيط يعرض صفحة رئيسية وقائمة مقالات مع وراثة قالب أساسي:

ملف التطبيق app.py

python
from flask import Flask, render_template app = Flask(__name__) articles = [ {'title': 'مقدمة في Flask', 'author': 'محمد', 'content': 'Flask إطار عمل ويب بسيط وقوي.'}, {'title': 'استخدام القوالب', 'author': 'علي', 'content': 'كيفية استخدام قوالب Jinja2 في Flask.'}, {'title': 'وراثة القوالب', 'author': 'سارة', 'content': 'فهم وراثة القوالب يساعد في تصميم أفضل.'}, ] @app.route('/') def home(): return render_template('index.html', articles=articles) if __name__ == '__main__': app.run(debug=True)

قالب أساسي templates/base.html

html
html> <html lang="ar"> <head> <meta charset="UTF-8"> <title>{% block title %}موقعي{% endblock %}title> <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}"> head> <body> <header> <h1>موقعي الإلكترونيh1> <nav> <a href="/">الرئيسيةa> <a href="/about">حولa> nav> header> <main> {% block content %}{% endblock %} main> <footer> <p>© جميع الحقوق محفوظة 2025p> footer> body> html>

قالب الصفحة الرئيسية templates/index.html

html
{% extends "base.html" %} {% block title %}الرئيسية{% endblock %} {% block content %} <h2>قائمة المقالاتh2> <ul> {% for article in articles %} <li> <h3>{{ article.title }}h3> <p>بقلم: {{ article.author }}p> <p>{{ article.content }}p> li> {% endfor %} ul> {% endblock %}

تحسينات SEO باستخدام القوالب

عند بناء صفحات ويب ديناميكية باستخدام Flask والقوالب، من الضروري مراعاة قواعد تحسين محركات البحث (SEO) لتصدر نتائج البحث. بعض النصائح الأساسية تشمل:

  • استخدام الوسوم المناسبة مثل </code> و<code data-start="10790" data-end="10798"></code> داخل القالب الأساسي مع إمكانية تخصيصها عبر الأقسام المختلفة.</p> </li> <li data-start="10860" data-end="10907"> <p data-start="10862" data-end="10907">ضمان أن تكون الروابط URL صديقة لمحركات البحث.</p> </li> <li data-start="10908" data-end="10988"> <p data-start="10910" data-end="10988">تحسين سرعة تحميل الصفحات من خلال تنظيم ملفات CSS وJavaScript وربطها بشكل صحيح.</p> </li> <li data-start="10989" data-end="11049"> <p data-start="10991" data-end="11049">استخدام عناوين فرعية (H1, H2, H3) بشكل منطقي داخل القوالب.</p> </li> <li data-start="11050" data-end="11141"> <p data-start="11052" data-end="11141">دعم اللغات المختلفة باستخدام خاصية <code data-start="11087" data-end="11093">lang</code> في وسم <code data-start="11101" data-end="11109"></code> كما هو موضح في الأمثلة السابقة.</p> </li> </ul> <hr data-start="11143" data-end="11146"> <h2 data-start="11148" data-end="11158" id="mwx-section-26">الخاتمة</h2> <p data-start="11160" data-end="11675">تُعتبر القوالب في Flask جوهرًا أساسيًا لبناء تطبيقات ويب مرنة وديناميكية. باستخدام نظام القوالب Jinja2، يمكن للمطورين تصميم صفحات منظمة وقابلة لإعادة الاستخدام من خلال الوراثة والتضمين، مما يعزز الإنتاجية ويقلل من التكرار. الجمع بين بايثون في جانب الخادم وقوالب HTML الديناميكية يتيح تطوير تطبيقات متكاملة تلبي احتياجات المستخدمين بشكل فعال، مع إمكانيات كبيرة للتخصيص والتحسين المستمر. الفهم العميق لكيفية التعامل مع القوالب يفتح آفاقًا واسعة أمام المطورين لبناء تطبيقات أكثر تعقيدًا وتنظيمًا مع تجربة مستخدم محسنة.</p> <hr data-start="11677" data-end="11680"> <h3 data-start="11682" data-end="11694" id="mwx-section-27">المراجع:</h3> <ol data-start="11696" data-end="11971" data-is-last-node="" data-is-only-node=""> <li data-start="11696" data-end="11831"> <p data-start="11699" data-end="11831">الوثائق الرسمية لإطار العمل Flask:<br data-start="11733" data-end="11736"><br /> <a data-start="11739" data-end="11831" class="cursor-pointer" rel="noopener" target="_new">https://flask.palletsprojects.com/en/latest/</a></p> </li> <li data-start="11833" data-end="11971" data-is-last-node=""> <p data-start="11836" data-end="11971" data-is-last-node="">الوثائق الرسمية لنظام القوالب Jinja2:<br data-start="11873" data-end="11876"><br /> <a data-start="11879" data-end="11971" data-is-last-node="" class="cursor-pointer" rel="noopener" target="_new">https://jinja.palletsprojects.com/en/latest/</a></p> </li> </ol> </div> </div> </div> </div> <div class="mwx-article-help"><span>معلومة تحتاج إلى تصحيح؟ حدّد الجملة وأرسل بلاغًا واضحًا.</span><a class="mwr-report-button" href="https://mwade3.com/report/?post=3143796" data-report-post="3143796"><span aria-hidden="true">⚑</span> أبلغ عن هذا المحتوى</a></div> </article> <aside class="mwx-reading-sidebar" aria-label="استكشف الموقع"><div class="mwx-side-box"><span class="mwx-eyebrow">دليلك في مواضيع</span><h2>مساحة لكلّ اهتمام.</h2><p>انتقل إلى مجال جديد، أو أكمل القراءة في موضوع تحبّه.</p><a class="mwx-button" href="https://mwade3.com/categories/">اكتشف المجالات <svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 12H4m6-6-6 6 6 6"/></svg></a></div><nav class="mwx-side-toc" aria-label="محتويات الصفحة"><h2>في هذه الصفحة</h2><a href="#mwx-section-1">مفهوم القوالب في Flask</a><a href="#mwx-section-2">هيكلية مجلد القوالب في مشروع Flask</a><a href="#mwx-section-3">إنشاء القوالب باستخدام Jinja2</a><a href="#mwx-section-7">طريقة ربط القوالب مع Flask</a><a href="#mwx-section-8">الوراثة في القوالب Template Inheritance</a><a href="#mwx-section-11">التعامل مع ملفات القوالب المتعددة</a><a href="#mwx-section-12">تمرير البيانات إلى القوالب</a><a href="#mwx-section-15">استخدام الفلاتر Filters في Jinja2</a><a href="#mwx-section-18">تضمين ملفات CSS وJavaScript في القوالب</a><a href="#mwx-section-19">التقاط الأخطاء في القوالب</a><a href="#mwx-section-20">خلاصة جدولية لأنواع الأدوات في قوالب Flask (Jinja2)</a><a href="#mwx-section-21">تطبيق عملي متكامل</a><a href="#mwx-section-25">تحسينات SEO باستخدام القوالب</a><a href="#mwx-section-26">الخاتمة</a></nav><nav class="mwx-side-links" aria-label="روابط مفيدة"><h2>روابط مفيدة</h2><a href="https://mwade3.com/about-us/">من نحن<svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 12H4m6-6-6 6 6 6"/></svg></a><a href="https://mwade3.com/contact-us/">تواصل معنا<svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 12H4m6-6-6 6 6 6"/></svg></a><a href="https://mwade3.com/faq/">الأسئلة الشائعة<svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 12H4m6-6-6 6 6 6"/></svg></a><a href="https://mwade3.com/info/">دليل الموقع والسياسات<svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 12H4m6-6-6 6 6 6"/></svg></a></nav></aside> </div> <section class="mwx-section mwx-related"><div class="mwx-section-heading"><div><span class="mwx-eyebrow">أكمل الاستكشاف</span><h2>قد تحب أن تقرأ أيضًا</h2></div></div><div class="mwx-cards"> <article class="mwx-card "> <a class="mwx-card-art mwx-tone-technology" href="https://mwade3.com/%d8%a5%d9%86%d8%b4%d8%a7%d8%a1-%d9%85%d8%af%d9%88%d9%86%d8%a9-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-node-js/" tabindex="-1" aria-hidden="true"> <img width="768" height="547" src="https://mwade3.com/wp-content/uploads/logo-768x547.png" class="mwx-card-image" alt="" decoding="async" srcset="https://mwade3.com/wp-content/uploads/logo-768x547.png 768w, https://mwade3.com/wp-content/uploads/logo-300x214.png 300w, https://mwade3.com/wp-content/uploads/logo.png 1008w" sizes="auto, (max-width: 768px) 100vw, 768px" /> </a> <div class="mwx-card-copy"> <a class="mwx-kicker" href="https://mwade3.com/category/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/">البرمجة</a> <h2><a href="https://mwade3.com/%d8%a5%d9%86%d8%b4%d8%a7%d8%a1-%d9%85%d8%af%d9%88%d9%86%d8%a9-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-node-js/">إنشاء مدونة باستخدام Node.js</a></h2> <p>إنشاء مدوّنة باستخدام Node.js وExpress (الجزء الأول) في عصر التطور التكنولوجي المتسارع، أصبحت منصات التدوين ال…</p> <div class="mwx-card-bottom"><button class="mwx-save-button mwx-save-compact" type="button" disabled data-save-id="3153372" data-save-title="إنشاء مدونة باستخدام Node.js" data-save-url="https://mwade3.com/%d8%a5%d9%86%d8%b4%d8%a7%d8%a1-%d9%85%d8%af%d9%88%d9%86%d8%a9-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-node-js/" aria-pressed="false" aria-label="حفظ للقراءة لاحقًا: إنشاء مدونة باستخدام Node.js"><svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h12v18l-6-4-6 4Z"/></svg><span>حفظ للقراءة</span></button><time datetime="2025-06-11T10:08:09+03:00">11 يونيو 2025</time><a href="https://mwade3.com/%d8%a5%d9%86%d8%b4%d8%a7%d8%a1-%d9%85%d8%af%d9%88%d9%86%d8%a9-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-node-js/" aria-label="اقرأ: إنشاء مدونة باستخدام Node.js"><svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 12H4m6-6-6 6 6 6"/></svg></a></div> </div> </article> <article class="mwx-card "> <a class="mwx-card-art mwx-tone-technology" href="https://mwade3.com/%d8%aa%d8%ad%d9%88%d9%8a%d9%84-html-%d8%a5%d9%84%d9%89-%d9%82%d8%a7%d9%84%d8%a8-%d9%88%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3/" tabindex="-1" aria-hidden="true"> <img width="768" height="547" src="https://mwade3.com/wp-content/uploads/logo-768x547.png" class="mwx-card-image" alt="" decoding="async" srcset="https://mwade3.com/wp-content/uploads/logo-768x547.png 768w, https://mwade3.com/wp-content/uploads/logo-300x214.png 300w, https://mwade3.com/wp-content/uploads/logo.png 1008w" sizes="auto, (max-width: 768px) 100vw, 768px" /> </a> <div class="mwx-card-copy"> <a class="mwx-kicker" href="https://mwade3.com/category/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/">البرمجة</a> <h2><a href="https://mwade3.com/%d8%aa%d8%ad%d9%88%d9%8a%d9%84-html-%d8%a5%d9%84%d9%89-%d9%82%d8%a7%d9%84%d8%a8-%d9%88%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3/">تحويل HTML إلى قالب ووردبريس</a></h2> <p>مقدمة إلى تطوير قوالب ووردبريس: تحويل صفحة HTML إلى قالب ووردبريس يشكل ووردبريس أحد أكثر أنظمة إدارة المحتوى ا…</p> <div class="mwx-card-bottom"><button class="mwx-save-button mwx-save-compact" type="button" disabled data-save-id="3153351" data-save-title="تحويل HTML إلى قالب ووردبريس" data-save-url="https://mwade3.com/%d8%aa%d8%ad%d9%88%d9%8a%d9%84-html-%d8%a5%d9%84%d9%89-%d9%82%d8%a7%d9%84%d8%a8-%d9%88%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3/" aria-pressed="false" aria-label="حفظ للقراءة لاحقًا: تحويل HTML إلى قالب ووردبريس"><svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h12v18l-6-4-6 4Z"/></svg><span>حفظ للقراءة</span></button><time datetime="2025-06-11T10:03:35+03:00">11 يونيو 2025</time><a href="https://mwade3.com/%d8%aa%d8%ad%d9%88%d9%8a%d9%84-html-%d8%a5%d9%84%d9%89-%d9%82%d8%a7%d9%84%d8%a8-%d9%88%d9%88%d8%b1%d8%af%d8%a8%d8%b1%d9%8a%d8%b3/" aria-label="اقرأ: تحويل HTML إلى قالب ووردبريس"><svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 12H4m6-6-6 6 6 6"/></svg></a></div> </div> </article> <article class="mwx-card "> <a class="mwx-card-art mwx-tone-technology" href="https://mwade3.com/%d8%aa%d9%86%d8%b8%d9%8a%d9%85-%d8%a7%d9%84%d8%b4%d9%8a%d9%81%d8%b1%d8%a9-%d9%81%d9%8a-javascript/" tabindex="-1" aria-hidden="true"> <img width="768" height="547" src="https://mwade3.com/wp-content/uploads/logo-768x547.png" class="mwx-card-image" alt="" decoding="async" srcset="https://mwade3.com/wp-content/uploads/logo-768x547.png 768w, https://mwade3.com/wp-content/uploads/logo-300x214.png 300w, https://mwade3.com/wp-content/uploads/logo.png 1008w" sizes="auto, (max-width: 768px) 100vw, 768px" /> </a> <div class="mwx-card-copy"> <a class="mwx-kicker" href="https://mwade3.com/category/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/">البرمجة</a> <h2><a href="https://mwade3.com/%d8%aa%d9%86%d8%b8%d9%8a%d9%85-%d8%a7%d9%84%d8%b4%d9%8a%d9%81%d8%b1%d8%a9-%d9%81%d9%8a-javascript/">تنظيم الشيفرة في JavaScript</a></h2> <p>تصميم النّصوص البرمجيّة: تنظيم JavaScript يُعدُّ تنظيم النصوص البرمجية في JavaScript من الركائز الأساسية التي…</p> <div class="mwx-card-bottom"><button class="mwx-save-button mwx-save-compact" type="button" disabled data-save-id="3153329" data-save-title="تنظيم الشيفرة في JavaScript" data-save-url="https://mwade3.com/%d8%aa%d9%86%d8%b8%d9%8a%d9%85-%d8%a7%d9%84%d8%b4%d9%8a%d9%81%d8%b1%d8%a9-%d9%81%d9%8a-javascript/" aria-pressed="false" aria-label="حفظ للقراءة لاحقًا: تنظيم الشيفرة في JavaScript"><svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 3h12v18l-6-4-6 4Z"/></svg><span>حفظ للقراءة</span></button><time datetime="2025-06-11T09:59:03+03:00">11 يونيو 2025</time><a href="https://mwade3.com/%d8%aa%d9%86%d8%b8%d9%8a%d9%85-%d8%a7%d9%84%d8%b4%d9%8a%d9%81%d8%b1%d8%a9-%d9%81%d9%8a-javascript/" aria-label="اقرأ: تنظيم الشيفرة في JavaScript"><svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 12H4m6-6-6 6 6 6"/></svg></a></div> </div> </article> </div></section> </main> <footer class="mwx-footer" data-mwx-footer> <div class="mwx-container mwx-footer-shell"> <div class="mwx-footer-intro"> <div class="mwx-footer-brand"><a class="mwx-brand" href="https://mwade3.com/"><span class="mwx-brand-mark" aria-hidden="true"><svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v16M12 5C9 3 5 3 2 4v15c4-1 7-1 10 2 3-3 6-3 10-2V4c-3-1-7-1-10 1Z"/></svg></span><span><strong>مواضيع<span class="mwx-brand-dot">.</span></strong><small>كل قراءة، فكرة جديدة</small></span></a><p>معرفة عربية موثوقة وأدوات عملية ليوم أوضح.</p></div> <div class="mwx-footer-actions"><a href="https://mwade3.com/last/">آخر المواضيع <svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 12H4m6-6-6 6 6 6"/></svg></a><a href="https://mwade3.com/categories/">تصفّح المجالات</a></div> </div> <div class="mwx-footer-links"> <nav class="mwx-footer-link-group" aria-label="استكشف مواضيع"><button class="mwx-footer-link-toggle" type="button" aria-expanded="true" aria-controls="mwx-footer-explore"><span>استكشف</span><svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></button><div class="mwx-footer-link-panel" id="mwx-footer-explore"><a href="https://mwade3.com/tools/">أدوات مواضيع</a><a href="https://mwade3.com/paths/">مسارات الاستكشاف</a><a href="https://mwade3.com/library/">مكتبتي</a><a href="https://mwade3.com/">الرئيسية</a><a href="https://mwade3.com/categories/">المجالات والتصنيفات</a><a href="https://mwade3.com/last/">آخر المواضيع</a><a href="https://mwade3.com/faq/">الأسئلة الشائعة</a></div></nav> <nav class="mwx-footer-link-group" aria-label="عن الموقع"><button class="mwx-footer-link-toggle" type="button" aria-expanded="true" aria-controls="mwx-footer-about"><span>عن مواضيع</span><svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></button><div class="mwx-footer-link-panel" id="mwx-footer-about"><a href="https://mwade3.com/weather/">الطقس</a><a href="https://mwade3.com/today/">التاريخ والمناسبات</a><a href="https://mwade3.com/about-us/">من نحن</a><a href="https://mwade3.com/%d9%85%d8%a8%d8%a7%d8%af%d8%a6-%d8%a7%d9%84%d9%86%d8%b4%d8%b1-%d9%81%d9%8a-%d9%85%d9%86%d8%b5%d8%a9-%d9%85%d9%88%d8%a7%d8%b6%d9%8a%d8%b9/">مبادئ النشر</a><a href="https://mwade3.com/contact-us/">تواصل معنا</a><a href="https://mwade3.com/report/">الإبلاغ عن محتوى</a></div></nav> <nav class="mwx-footer-link-group" aria-label="السياسات والحقوق"><button class="mwx-footer-link-toggle" type="button" aria-expanded="true" aria-controls="mwx-footer-policies"><span>السياسات والحقوق</span><svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg></button><div class="mwx-footer-link-panel" id="mwx-footer-policies"><a href="https://mwade3.com/privacy/">سياسة الخصوصية</a><a href="https://mwade3.com/cookies/">ملفات تعريف الارتباط</a><button type="button" class="mwx-footer-privacy" data-mwc-open-preferences>خيارات الخصوصية</button><a href="https://mwade3.com/terms/">شروط الاستخدام</a><a href="https://mwade3.com/info/">جميع السياسات والمعلومات</a></div></nav> </div> <div class="mwx-footer-bottom"><span>© 2026 مواضيع. جميع الحقوق محفوظة.</span><a href="https://mwade3.com/contact-us/">تواصل معنا <svg class="mwx-icon " viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 6 9 7 9-7"/></svg></a><a href="#mwx-site" class="mwx-back-top">إلى الأعلى ↑</a></div> </div> </footer> <div class="mwx-toast" role="status" aria-live="polite" hidden></div></div> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/jannah-new/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="mwc-privacy-js-before"> window.mwcConsentConfig={"version":"2026-10-12.1","expiryDays":180,"cookieName":"mwc_consent","privacyUrl":"https:\/\/mwade3.com\/privacy\/","cookiesUrl":"https:\/\/mwade3.com\/cookies\/","termsUrl":"https:\/\/mwade3.com\/terms\/","contactUrl":"https:\/\/mwade3.com\/contact-us\/","language":"ar","advertising":false,"lastUpdatedAr":"12 \u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644 2026","lastUpdatedEn":"12 October 2026"}; //# sourceURL=mwc-privacy-js-before </script> <script data-wp-strategy="defer" defer id="mwc-privacy-js" src="https://mwade3.com/wp-content/plugins/mwade3-privacy/assets/privacy.js?ver=1.0.0"></script> <script data-wp-strategy="defer" defer id="mwx-site-js" src="https://mwade3.com/wp-content/plugins/mwade3-experience/assets/site.js?ver=3.6.0"></script> <script data-wp-strategy="defer" defer id="mwx-calculations-js" src="https://mwade3.com/wp-content/plugins/mwade3-experience/assets/calculations.js?ver=3.6.0"></script> <script data-wp-strategy="defer" defer id="mwx-portal-js" src="https://mwade3.com/wp-content/plugins/mwade3-experience/assets/portal.js?ver=3.6.0"></script> <script data-wp-strategy="defer" defer id="mwx-live-js" src="https://mwade3.com/wp-content/plugins/mwade3-experience/assets/live.js?ver=3.6.0"></script> <script data-wp-strategy="defer" defer id="mwc-desk-js" src="https://mwade3.com/wp-content/plugins/mwade3-contact/assets/desk.js?ver=1.0.0"></script> <script id="wp-consent-api-js-extra"> var consent_api = {"consent_type":"optin","waitfor_consent_hook":"","cookie_expiration":"30","cookie_prefix":"wp_consent","services":[]}; //# sourceURL=wp-consent-api-js-extra </script> <script id="wp-consent-api-js" src="https://mwade3.com/wp-content/plugins/wp-consent-api/assets/js/wp-consent-api.min.js?ver=2.1.0"></script> <div id="mwc-privacy-root" class="mwc-root" data-version="2026-10-12.1"></div> <noscript><div class="mwc-noscript" lang="ar" dir="rtl">ملفات الارتباط الاختيارية متوقفة لأن JavaScript غير متاح. يمكنك قراءة <a href="https://mwade3.com/cookies/">سياسة ملفات الارتباط</a>.</div></noscript> </body> </html>