تسلط بر الگوهای جنگو: راهنمای ویژگیهای پیشرفته و بهترین روشها

قالبهای جنگو نقشی حیاتی در ساخت اپلیکیشنهای وب پویا و واکنشگرا دارند. آنها راهی برای تعریف ساختار و طرح بندی یک صفحه وب بدون نگرانی در مورد کد اصلی ارائه می دهند.
در این مقاله، ما عمیقتر به دنیای قالبهای جنگو میپردازیم و برخی از ویژگیهای پیشرفته و بهترین روشها را بررسی میکنیم تا به شما کمک کند مهارتهای توسعه وب خود را به سطح بعدی ارتقا دهید.
اظهارات مشروط
یکی از اساسی ترین جنبه های قالب های جنگو، توانایی کنترل جریان یک قالب بر اساس شرایط خاص است.
این امر از طریق استفاده از عبارات شرطی به دست می آید، که به شما اجازه می دهد تا بلوک های خاصی از کد را تنها در صورت رعایت شرایط خاص اجرا کنید.
سه نوع دستور شرطی در قالب های جنگو موجود است: اگر، elseif، و دیگر. هر یک از این انواع بیانیه هدف متفاوتی را دنبال می کند و می تواند برای رسیدگی به سناریوهای مختلف استفاده شود.
در اینجا مثالی از نحوه استفاده از دستورات شرطی در قالب جنگو آورده شده است:
{% if name %}
Hello, {{ name }}!
{% else %}
No name provided.
{% endif %}
در این مثال، اگر بیانیه بررسی می کند که آیا متغیر نام وجود دارد. اگر این کار را کرد، اولین بلوک کد اجرا می شود، در غیر این صورت بلوک دوم نمایش داده می شود.
را elseif عبارت را می توان برای بررسی چند شرط به طور همزمان استفاده کرد، در حالی که دیگر دستور زمانی اجرا می شود که هیچ یک از شرایط قبلی درست نباشد.
حلقه ها (برای، در حالی که)
یکی دیگر از جنبههای مهم قالبهای جنگو، توانایی تکرار بر روی مجموعههای داده است. حلقه ها به شما این امکان را می دهند که به راحتی اقدامات تکراری را روی مجموعه داده های بزرگ انجام دهید.
دو نوع حلقه در قالب های جنگو موجود است: برای و در حالی که. هر دو حلقه اهداف مشابهی دارند، اما در نحوه مدیریت تکرارها با هم تفاوت دارند.
در اینجا مثالی از نحوه استفاده از حلقه ها در قالب جنگو آورده شده است:
{% for item in items %}
{{ item.name }} - {{ item.price }}
{% empty %}
No items found.
{% endfor %}
در این مثال، برای حلقه بر روی لیستی از اشیاء نامیده شده تکرار می شود موارد. هر شی دارای یک نام و الف قیمت ویژگی که در قالب نمایش داده می شود. زمانی که هیچ موردی در لیست وجود ندارد (خالی، دومین بلوک کد اجرا می شود.
لیست ها و تاپل ها
قالب های جنگو همچنین از کار با لیست ها و تاپل ها پشتیبانی می کنند. شما می توانید لیست ها و تاپل ها را مستقیماً در قالب ها با استفاده از درک لیست، برش و روش های دیگر دستکاری کنید.
درک لیست به شما این امکان را می دهد که لیست های جدیدی را بر اساس لیست های موجود ایجاد کنید و آنها را به ویژه برای ایجاد لیست های پویا مفید می کند.
در اینجا مثالی از نحوه استفاده از درک لیست در قالب جنگو آورده شده است:
{% for num in range(1, 6) %}
The number {{ num }} is...
{% endfor %}
در این مثال، درک لیست لیستی از اعداد بین 1 تا 6 را ایجاد می کند که هر کدام با یک خط متن جداگانه در خروجی نهایی نمایش داده می شود.
ناوبری و دستکاری فرهنگ لغت
دیکشنری ها یکی دیگر از ساختارهای داده رایج در قالب های جنگو هستند. می توانید با استفاده از نماد نقطه و نحو کلید، فرهنگ لغت ها را مستقیماً در قالب ها پیمایش و دستکاری کنید. نماد نقطه به شما امکان می دهد به ویژگی های یک فرهنگ لغت دسترسی داشته باشید، در حالی که نحو کلید به شما امکان می دهد مقادیر را بر اساس کلیدهای آنها بازیابی کنید.
در اینجا مثالی از نحوه استفاده از ناوبری و دستکاری فرهنگ لغت در قالب جنگو آورده شده است:
{% for key, value in my_dict.items() %}
Key: {{ key }} Value: {{ value }}
{% endfor %}
در این مثال، فرهنگ لغت my_dict شامل چندین جفت کلید-مقدار است که با استفاده از a تکرار می شوند برای حلقه هر جفت از یک کلید و یک مقدار متناظر تشکیل شده است که هر دو در خروجی نهایی نمایش داده می شوند.
برچسب های سفارشی
در نهایت، قالبهای جنگو از تعریف تگهای سفارشی پشتیبانی میکنند. این تگ ها شما را قادر می سازند تا تکه های کد قابل استفاده مجددی ایجاد کنید که با کمترین تلاش در سراسر پروژه شما اعمال شود.
برای تعریف یک تگ سفارشی، باید تابعی ایجاد کنید که یک شی قابل رندر را برمی گرداند. این شیء می تواند حاوی هر نحو معتبر الگوی جنگو باشد که به شما امکان می دهد تگ های سفارشی پیچیده و قدرتمند ایجاد کنید.
در اینجا مثالی از نحوه تعریف و استفاده از یک تگ سفارشی در قالب جنگو آورده شده است:
from django import template
def my_tag(arg):
return """
Hello, {{ arg }}.
{% load my_tag %}
Hello, {{ my_tag("world") }}
نادیده گرفتن برچسب های موجود
گاهی اوقات، ممکن است لازم باشد رفتار یک تگ قالب جنگو موجود را مطابق با نیازهای خود تغییر دهید.
با تگهای سفارشی، میتوانید بدون هیچ زحمتی رفتار پیشفرض تگهای داخلی را بدون دست زدن به کد اصلی جنگو لغو کنید. بیایید نادیده بگیریم تاریخ فیلتر برای نمایش تاریخ ها در قالب سفارشی:
# custom_tags.py
from django import template
from django.template.defaultfilters import date
register = template.Library()
@register.filter(name='custom_date')
def custom_date(value, arg):
return date(value, arg.upper())
در قالب شما:
<!-- templates/my_template.html -->
{% load custom_tags %}
<p>{{ my_date|custom_date:"d F Y" }}</p>
استفاده از کتابخانه های برچسب برای سازماندهی و استفاده مجدد
با رشد پروژه جنگو شما، ممکن است تعداد تگ های سفارشی افزایش یابد. جنگو به شما امکان میدهد تگهای سفارشی مرتبط را در کتابخانههای برچسب گروهبندی کنید تا سازماندهی خود را حفظ کرده و از بهم ریختگی جلوگیری کنید. بیایید یک کتابخانه برچسب برای مدیریت دستکاری های متنی مختلف ایجاد کنیم:
# text_tags.py
from django import template
register = template.Library()
@register.filter(name='capitalize_first')
def capitalize_first(value):
return value.capitalize()
@register.filter(name='reverse_text')
def reverse_text(value):
return value[::-1]
@register.filter(name='count_words')
def count_words(value):
return len(value.split())
در قالب شما:
<!-- templates/my_template.html -->
{% load text_tags %}
<p>{{ my_text|capitalize_first }}</p>
<p>{{ my_text|reverse_text }}</p>
<p>Word count: {{ my_text|count_words }}</p>
قالب های پیشرفته جنگو: راهنمای برچسب های سفارشی از جمله
تگهای سفارشی یکی از ویژگیهای قدرتمند قالبهای جنگو هستند که به شما اجازه میدهند تا قطعات کد قابل استفاده مجدد ایجاد کنید. با تعریف تابعی که یک شی قابل رندر را برمی گرداند، می توانید منطق پیچیده را کپسوله کنید و نگهداری و استفاده مجدد از آن را در پروژه خود آسان تر کنید.
برای تعریف یک تگ سفارشی، شما به سادگی نیاز دارید که یک تابع پایتون ایجاد کنید که یک آرگومان واحد را بگیرد و یک رشته یا شی رندرپذیر دیگر را برگرداند. در اینجا مثالی از نحوه تعریف یک برچسب سفارشی برای نمایش پیام تبریک آورده شده است:
from django import template
def greet(name):
return u"Hello, %s!" % name
هنگامی که تگ سفارشی خود را تعریف کردید، میتوانید از آن در قالبهای خود مانند هر قطعه دیگری از نحو الگو استفاده کنید. در اینجا مثالی از نحوه استفاده از آن آورده شده است سلام کردن تگ در قالب جنگو:
{% extends 'base.html' %}
{% block content %}
{% load greet %}
Hello, {{ greet('John') }}!
{% endblock %}
در این مثال، greet
برچسب در بالای قالب با استفاده از بارگذاری می شود load
دستورالعمل، و سپس استفاده می شود content
برای نمایش پیام تبریک با نام “جان” مسدود کنید.
سایر برچسب های سفارشی مفید
علاوه بر greet
تگ، چندین تگ سفارشی دیگر وجود دارد که ممکن است در قالب های جنگو خود مفید بیابید. برخی از نمونه ها عبارتند از:
- شامل رفر: به شما امکان می دهد بخشی از فایل الگوی دیگر را در قالب فعلی خود قرار دهید.
- فیلتر کنید: روشی مناسب برای اعمال فیلترها به عناصر تکی در قالب ارائه می دهد.
- ماکرو: شما را قادر می سازد تا تکه های قابل استفاده مجدد از کد الگو را تعریف کنید که می تواند در کل پروژه شما استفاده شود.
- پی گیری: کل درخت الگوها و اجداد را برای یک بلوک قالب مشخص نمایش می دهد.
در ادامه هر یک از این تگ ها با جزئیات بیشتری توضیح داده شده است:
فراگیر
را includeref
تگ به شما امکان می دهد بخشی از فایل قالب دیگر را در قالب فعلی خود قرار دهید. این می تواند زمانی مفید باشد که می خواهید از یک بخش کد در مکان های مختلف استفاده مجدد کنید، اما نمی خواهید آن را کلمه به کلمه تکرار کنید.
در اینجا مثالی از نحوه استفاده از آن آورده شده است
inclusiveRef</code> tag:
<code>{% includes 'common/header.html' %}
در این مثال، شامل می شود دستورالعملها به جنگو میگویند که محتویات آن را درج کند header.html فایل قالب در قالب فعلی. خروجی حاصل شامل بخش سرصفحه از الگوی موجود و هر محتوای دیگری از الگوی فعلی خواهد بود.
فیلتر
را فیلتر تگ روشی مناسب برای اعمال فیلترها بر روی عناصر تکی در قالب ارائه می دهد. از فیلترها می توان برای تغییر ظاهر عناصر منفرد یا تبدیل داده های مرتبط با آن عناصر استفاده کرد.
در اینجا مثالی از نحوه استفاده از آن آورده شده است فیلتر برچسب:
{% for item in items|filter:"reverse" %}
{{ item.name }} - {{ item.price }}
{% endfor %}
در این مثال، فیلتر دستورالعمل برای اعمال استفاده می شود معکوس فیلتر به موارد فهرست این باعث میشود که لیست قبل از لوپ شدن برعکس شود، بنابراین آخرین مورد در لیست ابتدا نمایش داده میشود.
شما می توانید فیلترهای خود را با استفاده از فیلتر تگ کنید، یا می توانید از فیلترهای از پیش تعریف شده ارائه شده توسط جنگو استفاده کنید. فیلترهای از پیش تعریف شده شامل مواردی مانند مخمر | بالا | پایین | نوار | کلمات کوتاه | سست کردن، بین دیگران.
کلان
را کلان برچسب شما را قادر می سازد تا تکه های قابل استفاده مجدد از کد الگو را تعریف کنید که می تواند در سراسر پروژه شما استفاده شود. ماکروها میانبرهایی برای کدهایی هستند که اغلب مورد استفاده قرار می گیرند و الگوهای شما را مختصرتر و خواناتر می کنند.
در اینجا مثالی از نحوه استفاده از آن آورده شده است کلان برچسب:
{% macro hello(name) %}
Hello, {{ name }}!
{% endmacro %}
{% hello("John") %}
در این مثال، سلام ماکرو یک بار در قالب تعریف می شود و بعداً دو بار در همان قالب استفاده می شود. ماکرو یک آرگومان واحد می گیرد، نام، و یک پیام تبریک با آن نام نمایش می دهد.
برای استفاده از یک ماکرو در قالب خود، آن را با تایپ نام آن و سپس پرانتزهای حاوی هر آرگومان مورد نیاز فراخوانی کنید. در داخل ماکرو، می توانید به هر متغیر یا عبارتی که قبلاً در قالب تعریف شده است اشاره کنید.
نتیجه
قالبهای جنگو نقش مهمی در ساخت اپلیکیشنهای وب پویا و واکنشگرا دارند. درک ویژگی های پیشرفته و بهترین شیوه ها می تواند مهارت ها و کارایی توسعه وب شما را به میزان قابل توجهی افزایش دهد.
عبارات مشروط، مانند اگر، elseif، و دیگر، به شما این امکان را می دهد که بر اساس شرایط خاص جریان قالب ها را کنترل کنید و قالب های شما را انعطاف پذیرتر و سازگارتر می کند.
حلقه ها، از جمله برای و در حالی که، به شما امکان می دهد تا در مورد مجموعه داده ها تکرار کنید و مدیریت مجموعه داده های بزرگ و نمایش اطلاعات تکراری را به شیوه ای مختصر آسان تر می کند.
قالبهای جنگو همچنین از کار با لیستها، تاپلها و فرهنگهای لغت پشتیبانی میکنند و شما را قادر میسازند تا دادهها را مستقیماً درون قالبها دستکاری کنید و در تولید محتوای پویا انعطافپذیری ایجاد کنید.
قدرت واقعی قالبهای جنگو در ایجاد تگهای سفارشی نهفته است که به شما امکان میدهد منطق پیچیده را کپسوله کنید و به راحتی از آن در سراسر پروژه خود استفاده کنید.
نادیده گرفتن برچسبهای موجود و سازماندهی برچسبهای مرتبط در کتابخانهها به قابلیت نگهداری و خوانایی پایگاه کد شما کمک میکند.
در نتیجه، تسلط بر قالبهای جنگو و اتخاذ بهترین روشها میتواند گردش کار توسعه وب شما را تا حد زیادی بهبود بخشد و در نتیجه برنامههای وب کارآمدتر، قابل نگهداری و قویتر را به همراه داشته باشد.
بنابراین، به دنیای قالب های جنگو شیرجه بزنید، این ویژگی های پیشرفته را آزمایش کنید و مهارت های توسعه وب خود را به سطح بعدی ارتقا دهید. کد نویسی مبارک!
اگر این پست را هیجانانگیز میدانید، پستهای هیجانانگیز بیشتری را در بلاگ Learnhub بیابید. ما همه چیزهای فنی از رایانش ابری گرفته تا Frontend Dev، Cybersecurity، AI و Blockchain را می نویسیم.