ویرایش مطلبها
اکنون صفحهای میسازیم تا کاربران بتوانند از طریق آن موضوعات خود را ویرایش کنند.
آدرس edit_entry
URL صفحه باید شمارهی مطلب مورد ویرایش را انتقال دهد. این learning_logs/urls.py است:
شمارهی انتقالیافته از طریق URL (برای مثال http://localhost:8000/edit_entry/1/) در پارامتر entry_id ذخیره میشود. این الگوی URL درخواستهای منطبق با خود را به تابع نمای edit_entry() میفرستد.
تابع نمای edit_entry()
زمانی که صفحهی edit_entry یک درخواست GET دریافت میکند تابع edit_entry() فرمی برای ویرایش مطلب برمیگرداند. وقتی یک درخواست POST به همراه متن ویرایششده بگیرد آن را در پایگاه داده ذخیره میکند:
|
|
ابتدا مدل Entry را وارد میکنیم. در ۱ شیء موضوعی که کاربر میخواهد ویرایش کند و موضوع مرتبط با آن را دریافت میکنیم. در داخل if که برای درخواستهای GET اجرا میشود نمونهای از EntryForm با نشانوند instance=entry میسازیم (۲). این نشانوند به جانگو میگوید که فرمی بسازد که با اطّلاعات شیء فعلی موضوع از پیش پر شده باشد. کاربران قادر هستند که دادههای موجود را ببینند و آن را اصلاح کنند.
برای پردازش درخواست POST نشانوندهای instance=entry و data=request.POST را انتقال میدهیم (۳). این نشانوندها به جانگو میگویند که یک نمونهی فرم بر اساس اطّلاعات مربوط به شیء مطلب فعلی بسازد و آن را با هر دادهای مرتبطی از request.POST بهروز کند. سپس اعتبار فرم را بررسی میکنیم؛ اگر چنین بود save() را بدون هیچ نشانوندی فرامیخوانیم چون موضوع از قبل با موضوع درست مرتبط شده است (۴). سپس کاربر را به صفحهی topic برمیگردانیم که کاربران در آن میتوانند نسخهی بهروزشدهی مطلبی را که ویراستهاند ببینند (۵).
اگر یک فرم ابتدایی برای ویرایش مطلب نشان دهیم یا فرم ثبتشده نامعتبر باشد یک دیکشنری context درست میکنیم و صفحه را به کمک قالب edit_entry.html میسازیم.
قالب edit_entry
در ادامه قالب edit_entry.html را میسازیم که مشابه new_entry.html است:
|
|
نشانوند action در ۱ فرم را برای پردازش به تابع edit_entry() میفرستد. شمارهی مطلب را به عنوان نشانوندی در تگ {% url %} قرار میدهیم تا تابع نما بتواند شیء موضوع درست را تغییر دهد. عنوان دکمهی ثبت را Save changes میگذاریم که به کاربر گوشزد کند در حال ویرایش مطلب است نه ایجاد مطلب جدید (۲).
ایجاد پیوند به صفحهی edit_entry
باید به هر مطلبی در صفحهی موضوعات پیوندی به صفحهی edit_entry ایجاد کنیم:
پس از این که تاریخ و متن هر موضوع نمایش داده شد پیوند ویرایش را قرار میدهیم. از تگ قالب {% url %} و مشخّصهی ID مطلب کنونی در حلقه (entry.id)، برای تعیین URL برای الگوی URL با نام edit_entry استفاده میکنیم. متن Edit Entry پیوند پس از هر مطلب در صفحه ظاهر میشود. شکل ۱۹-۳ نشان میدهد که صفحهی موضوعات با این پیوندها چگونه به نظر میرسد.
![][image49]
شکل ۱۹-۳: اکنون هر مطلب پیوندی برای ویرایش دارد.
Learning Log اکنون بیشتر قابلیّتهای مورد نیاز را دارد. کاربران میتوانند موضوعها و مطلبها را اضافه کنند و هر مجموعه از مطالب را که بخواهند بخوانند. در بخش بعدی یک سیستم ثبت نام برای کاربران پیاده میکنیم تا هر کس بتواند در سایت حساب بسازد و موضوعها و مطالب خود را ایجاد کند.