جنگو یکی از فریمورکهای قدرتمند برای توسعه برنامههای وب پایتون است که به توسعهدهندگان اجازه میدهد به سرعت و به راحتی برنامههای مقیاسپذیر و قابل نگهداری ایجاد کنند. یکی از ویژگیهای مهم جنگو، پشتیبانی از برچسبها یا همان 'tags' میباشد. این برچسبها به توسعهدهندگان امکانات زیادی را برای ردهبندی و مدیریت محتوا میدهند. در این آموزش قصد داریم تا به جزئیات استفاده از برچسبها در جنگو بپردازیم.
برچسبها به طور خلاصه کارهایی هستند که میتوانند برای افزودن امکانات اضافی به مدلهای پایگاه دادهی شما استفاده شوند. برای مثال، میتوانید برای مقالات یک وبلاگ برچسبهایی مانند 'اخبار' یا 'تحلیل' را اضافه کنید تا کاربران بتوانند به راحتی مقالات مرتبط را پیدا کنند.
ابتدا، نیاز است که یک مدل جدید برای برچسبها در پایگاه داده تعریف شود. مدل برچسب بسیار ساده است و معمولا شامل یک نام و یک فیلد برای ذخیرهی نوشتههای مرتبط است. پس از تعریف مدل، میتوانید این مدل را به مدلهای دیگر با استفاده از یک رابطهی بسیاری به بسیاری (ManyToMany) متصل کنید.
پس از تعریف مدل برچسب، اکنون نوبت به اضافه کردن این ویژگی به برنامه میرسد. معمولاً برچسبها در فرمها و ویوها مورد استفاده قرار میگیرند تا مدیران سایت و کاربران بتوانند به راحتی برچسبهای جدیدی را ایجاد کرده و مدیریت کنند. همچنین، میتوانید از برچسبها برای فیلتر کردن محتوا در ویوها و قالبها استفاده کنید.
در ادامه به یک نمونه از کدنویسی مربوط به برچسبگذاری در جنگو میپردازیم. به یاد داشته باشید که همیشه از بهروزترین روشها و کتابخانهها استفاده کنید تا جلوی مشکلات آتی و ناسازگاریها گرفته شود.
# models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
tags = models.ManyToManyField('Tag', related_name='posts')
class Tag(models.Model):
name = models.CharField(max_length=50, unique=True)
def __str__(self):
return self.name
# models.py
- فایل مدل پروژه شما.from django.db import models
- ایمپورت کردن مدلها از جنگو برای تعریف مدلهای پایگاه داده.class Post(models.Model):
- تعریف یک مدل جدید به نام Post برای پستهای با ویژگی های عنوان و محتوا.title = models.CharField(max_length=100)
- فیلدی برای عنوان پست با طول حداکثر 100 کاراکتر.content = models.TextField()
- فیلدی برای محتوای پست به عنوان متن آزاد.tags = models.ManyToManyField('Tag', related_name='posts')
- ایجاد یک ارتباط بسیاری به بسیاری با مدل Tag برای افزودن برچسبها به پستها.class Tag(models.Model):
- تعریف یک مدل جدید برای برچسبها.name = models.CharField(max_length=50, unique=True)
- فیلدی برای نام برچسب که متناظر با هر برچسب منحصر به فرد باشد.def __str__(self):
- تعریف متد __str__ برای بازگشت نام برچسب بهجای شیء نا مفهوم.return self.name
- بازگرداندن نام برچسب برای نمایش بهتر.