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

نویسنده : آرش ارزنده نیا

در ابتدا تنها یک متخصص شبکه های مایکروسافتی بودم ، کم کم به دنیای سیسکو و محیط های کامند لاینی علاقه مند شدم ، همزمان لینوکس رو هم توی پروژه هام دخیل میکردم ، چون در زمان دانشجویی تسلط خوبی روی طراحی وب سایت داشتم شروع کردم به نوشتن نرم افزارهای تحت وب ، تا مدت ها با php تمام پروژه هامو انجام میدادم ، گهگاهی هم با سی شارپ ، تا اینکه سوییچ کردم روی پایتون ، از اینجا به بعدش رو با هم تو این بلاگ میگذرونیم

نمایش * برای فیلد های ضروری در فرم


در فرم های وب سایتی یک مشخصه وجود دارد به نام فیلد های اجباری ، فیلدی که اجباری در نظر گرفته شود کاربر ملزم به پر کردن آن می باشد و این بدان معناست که تا زمانیکه فیلد های اجباری فاقد مقدار باشند کاربر قادر به ذخیره فرم در سیستم ما نمی باشد.

ما میخواهیم برای فیلد های اجباری یک * جلوی لیبل آن بگذاریم که کاربران نهایی با دیدن این ستاره متوجه شوند این فیلد جزو فیلدهای ضروری می باشد و حتما میبایست آن را پر کنید.

جنگو ابزارهای خوبی را برای کاور کردن این موضوع در نظر گرفته است. به دو صورت میتوان * را به جلوی Label یک فیلد نمایش داد ؛ یکی نمایش آن هنگامی که به تک تک فیلد ها در Template دسترسی داریم و دیگری نمایش آن هنگامی که به فیلد ها دسترسی مستقیم نداریم. نگران متوجه شدن این دو مدل نباشید (البته اگر متوجه نشدید) با مثال های زیر هم نحوه اجرا هم تفاوت نمایش فرم ها را بررسی میکنیم

جنگو ضروری بودن و یا نبودن فیلد ها را از روی تعریف مدل سازنده ی فرم آن متوجه میشود

class Student(models.Model):
    Name = models.CharField(max_length = 200)
    Address = models.CharField(max_length = 255 , null = True , blank = True)

همانطور که در تعریف فیلد ها مشاهده میکنید فیلد نام نمیتواند دارای مقدار خالی باشد ولی آدرس میتواند خالی باشد. پس جنگو از روی این تعاریف هنگام ساخت ModelForm متوجه اجباری بودن و یا نبودن یک فیلد میشود

حال فرض کنیم context ارسال شده به Template ما دارای متغیری به نام form و حاوی فرم ایجاد شده می باشد.

in template

{% for field in form %}
  {{field.label}} {% if field.field.required %} * {% endif %}
  {{field}}
{% endfor %}

در این نوع نمایش فرم همانطور که میبینید ما در داخل حلقه for دسترسی به تک تک فیلد ها و لیبل های آن داریم و به این طریق میتوانیم در جلوی لیبل هر فرم که ضروری میباشد یک ستاره چاپ بکنیم.

روش بعدی نمایش * جلوی فیلد ها در موقعی است که دسترسی به فیلد ها نداریم

in template

{{form.as_p}}

این نوع رندر کردن فرم ها تمامی فیلد ها را به صورت پاراگراف های جداگانه برای ما نمایش میدهد و همانطور که مشاهده میکنید در این نوع کد ما دسترسی مستقیم به تک تک فیلد ها نداریم. برای این نوع فراخوانی ها از دستور زیر استفاده میکنیم

class StudentForm(forms.ModelForm):
    required_css_class = 'required'
    class Meta:
        model = Student
        fields = '__all__'

در هنگام ساخت ModelForm کلاس CSS خاصی به فیلد های ضروری میدهیم و بعد با CSS میتوانیم * را جلوی لیبل آن نمایش دهیم قطعه کد زیر مثالی است از یک CSS


.required:after { content: '*'; }


Admin Django Password Shell django filter form get python query required جنگو فرم پایتون

نظرات شما :