فهرست سرفصل‌های Django
خانه (Home) مقدمه (Intro) شروع به کار (Get Started) ساخت محیط مجازی (Create Virtual Environment) نصب (Install Django) ساخت پروژه (Create Project) ساخت اپ (Create App) ویوها (Views) آدرس ها (URLs) قالب ها (Templates) مدل ها (Models) افزودن داده (Insert Data) به روزرسانی داده (Update Data) حذف داده (Delete Data) به روزرسانی مدل (Update Model) آماده سازی قالب و ویو (Prep Template and View) افزودن لینک به جزئیات (Add Link to Details) افزودن قالب مادر (Add Master Template) افزودن صفحه ایندکس اصلی (Add Main Index Page) قالب 404 (404 Template) افزودن ویوی تست (Add Test View) پنل مدیریت (Admin) ساخت کاربر (Create User) افزودن مدل ها (Include Models) تنظیم List Display (Set List Display) به روزرسانی اعضا (Update Members) افزودن اعضا (Add Members) حذف اعضا (Delete Members) متغیرها (Variables) تگ ها (Tags) شرط if/else (If Else) حلقه for (For Loop) کامنت (Comment) include (Include) معرفی QuerySet (QuerySet Introduction) متد get (QuerySet Get) فیلتر (QuerySet Filter) مرتب سازی (QuerySet Order By) افزودن فایل های استاتیک (Add Static Files) نصب WhiteNoise (Install WhiteNoise) جمع آوری فایل های استاتیک (Collect Static Files) افزودن فایل های استاتیک سراسری (Add Global Static Files) افزودن استایل به پروژه (Add Styles to the Project) مقدمه (PostgreSQL Intro) ساخت حساب AWS (Create AWS Account) ساخت دیتابیس در RDS (Create Database in RDS) اتصال به دیتابیس (Connect to Database) افزودن اعضا (Add Members) Elastic Beanstalk (EB) ساخت requirements.txt (Create requirements.txt) ساخت django.config (Create django.config) ساخت فایل zip (Create .zip File) استقرار با EB (Deploy with EB) به روزرسانی پروژه (Update Project) افزودن فیلد slug (Add Slug Field) افزودن Bootstrap 5 (Add Bootstrap 5) مرجع تگ های قالب (Template Tag Reference) مرجع فیلترها (Filter Reference) مرجع Field Lookups (Field lookups Reference) کامپایلر (Compiler) تمرین ها (Exercises) آزمون (Quiz) سرفصل (Syllabus) برنامه مطالعه (Study Plan) سرور (Server) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
Django

Django — افزودن فیلد slug (Add Slug Field)

آخرین بروزرسانی: 1404/08/20

افزودن فیلد slug (Add Slug Field)

«اسلاگ (Slug)» متنِ کوتاهِ آدرس پسند است. فقط حروف، اعداد و خط تیره دارد. با اسلاگ، URL خواناتر می شود و جست وجو بهتر می فهمد. اینجا اسلاگ را به مدل «Member» اضافه می کنیم و همه چیز را با URL جدید هماهنگ می کنیم.

افزودن فیلد اسلاگ به مدل

در models.py یک فیلد SlugField اضافه کن. اسلاگ شناسه خواناست؛ مثل نام دانش آموز به جای شماره.

from django.db import models

class Member(models.Model):
  firstname = models.CharField(max_length=255)
  lastname = models.CharField(max_length=255)
  phone = models.IntegerField(null=True)
  joined_date = models.DateField(null=True)
  slug = models.SlugField(default="", null=False)

  def __str__(self):
    return f"{self.firstname} {self.lastname}"

مشاهده در ادیتور

اجرای مهاجرت دیتابیس

ساختار مدل عوض شد. بنابراین باید مایگریشن بسازی و اعمال کنی.

python manage.py makemigrations

مشاهده در ادیتور

python manage.py migrate

مشاهده در ادیتور

پیش پر کردن اسلاگ در ادمین

می خواهیم اسلاگ از نام و نام خانوادگی پر شود. از prepopulated_fields استفاده کن.

from django.contrib import admin
from .models import Member

class MemberAdmin(admin.ModelAdmin):
  list_display = ("firstname", "lastname", "joined_date")
  prepopulated_fields = {"slug": ("firstname", "lastname")}
  
admin.site.register(Member, MemberAdmin)

مشاهده در ادیتور

نکته: رکوردهای قدیمی خالی هستند. هر کدام را یک بار ذخیره کن تا اسلاگ ساخته شود.

استفاده از اسلاگ در قالب

در قالب لیست اعضا، لینک را با اسلاگ بساز. این مانند نام دانش آموز در آدرس است.

{% extends "master.html" %}

{% block title %}
  My Tennis Club - List of all members
{% endblock %}

{% block content %}
  <div class="mycard">
    <h1>Members</h1>
    <ul>
      {% for x in mymembers %}
        <li onclick="window.location = 'details/{{ x.slug }}'">{{ x.firstname }} {{ x.lastname }}</li>
      {% endfor %}
    </ul>
  </div>
{% endblock %}

مشاهده در ادیتور

تغییر الگوی آدرس ها

در urls.py به جای <int:id> از <slug:slug> استفاده کن.

from django.urls import path
from . import views

urlpatterns = [
  path('', views.main, name='main'),
  path('members/', views.members, name='members'),
  path('members/details/<slug:slug>', views.details, name='details'),
  path('testing/', views.testing, name='testing'),
]

مشاهده در ادیتور

نمایش جزئیات با اسلاگ

در views.py عضو را با اسلاگ بگیر. سپس قالب جزئیات را رندر کن.

from django.http import HttpResponse
from django.template import loader
from .models import Member

def members(request):
  mymembers = Member.objects.all().values()
  template = loader.get_template('all_members.html')
  context = {
    'mymembers': mymembers,
  }
  return HttpResponse(template.render(context, request))

def details(request, slug):
  mymember = Member.objects.get(slug=slug)
  template = loader.get_template('details.html')
  context = {
    'mymember': mymember,
  }
  return HttpResponse(template.render(context, request))

def main(request):
  template = loader.get_template('main.html')
  return HttpResponse(template.render())

def testing(request):
  template = loader.get_template('template.html')
  context = {
    'fruits': ['Apple', 'Banana', 'Cherry'],
  }
  return HttpResponse(template.render(context, request))

مشاهده در ادیتور

اجرای سرور و بررسی

اگر سرور خاموش است، دوباره اجرا کن. سپس آدرس اعضا را باز کن و URL اسلاگ دار را ببین.

python manage.py runserver

مشاهده در ادیتور

جمع بندی سریع

  • اسلاگ، آدرس را خواناتر می کند.
  • فیلد اسلاگ را به مدل اضافه کن.
  • در ادمین، پیش پر کردن را فعال کن.
  • URL ها را به اسلاگ تغییر بده.
  • ویو جزئیات با اسلاگ کار کند.

برای مرور، راهنمای فیلد اسلاگ را ببین. همچنین برای استقرار، فصل استقرار با EB را بررسی کن.