کار در خانه: ساختن مدل کامنتها
در حال حاضر ما فقط یک مدل برای پستها داریم. چطور است که بتوانیم بازخوردی از خوانندگان وبلاگ بگیریم و اجازه بدهیم برای پستها کامنت بگذارند؟
ساختن مدل برای کامنتهای وبلاگ
فایل blog/models.py
را باز کنید و این قطعه کد را به آن اضافه کنید:
شما میتوانید به بخش مدلها در جنگو در آموزش اصلی جنگوگرلز برگردید و اگر نیاز دارید ویژگیهای هر نوع فیلد را دوره کنید.
در این تمرین ما یک نوع فیلد جدید داریم:
models.BooleanField
- این فیلد یک نوع فیلد درست/غلط است.
گزینه related_name
در models.ForeignKey
به ما اجازه میدهد که از طریق مدل پست، به کامنتها دسترسی داشته باشیم.
ساختن جدول برای مدلها در دیتابیس
الان زمان آن است که مدل کامنت را به دیتابیس اضافه کنیم. برای این کار باید به جنگو بگوییم که ما چه تغییراتی در مدل ایجاد کردهایم. دستور python manage.py makemigrations blog
را در خط فرمان بنویسید. باید چیزی شبیه به این ببینید:
میبینید که این دستور یک فایل مایگریشن دیگر برای ما در پوشه blog/migrations/
میسازد. حالا نیاز داریم تا این تغییرات را با نوشتن دستور python manage.py migrate blog
در خط فرمان، ثبت کنیم. نتیجه شبیه به این خواهد بود:
مدل کامنت ما حالا در دیتابیس وجود دارد! جالب نیست که ما از طریق پنل ادمین به آن دسترسی داشته باشیم؟
ثبت مدل کامنت در پنل ادمین
برای ثبت مدل کامنت در پنل ادمین به فایل blog/admin.py
بروید و خط زیر را پیدا کنید:
و دقیقاً در پایین آن، خط زیر اضافه کنید:
به یاد داشته باشید که مدل کامنت را در بالای فایل به شکل زیر فراخوانی یا import کنید:
اگر عبارت python manage.py runserver
را در خط فرمان بنویسید و به آدرس http://127.0.0.1:8000/admin/ در مرورگر خود سر بزنید، به لیستی از کامنتها دسترسی خواهید داشت و همچنین امکان آن را دارید که کامنتی اضافه یا کم کنید. کمی با این قابلیت کامنتها بازی کنید!
کامنتهایمان را نمایش دهیم
به فایل blog/templates/blog/post_detail.html
بروید و خطوط زیر را قبل از تگ
اضافه کنید:
حالا میتوانیم بخش کامنتها را در صفحه جزییات پست ببینیم.
اما این بخش میتواند کمی جذابتر هم باشد، پس بیایید کمی CSS به آن اضافه کنیم، در انتهای فایل static/css/blog.css
، خطوط زیر را اضافه کنید:
همچنین میتوانیم به خوانندگان در مورد کامنتهای هر پست در صفحه لیست پستها نیز اطلاع بدهیم. به فایل blog/templates/blog/post_list.html
بروید و خط زیر را اضافه کنید:
حالا تمپلیت ما شبیه به این خواهد بود:
به کاربر اجازه نوشتن کامنت بدهیم
خب حالا میتوانیم کامنتها را در وبلاگ خود ببینیم، اما نمیتوانیم کامنتی اضافه کنیم، بیایید این مشکل را حل کنیم!
به فایل blog/forms.py
بروید و خطوط زیر را به انتهای فایل اضافه کنید:
به یاد داشته باشید که مدل کامنت را فراخوانی کنید، خط زیر را پیدا کنید:
و به این شکل تغییر دهید:
حالا به فایل blog/templates/blog/post_detail.html
بروید و قبل از عبارت
، این خط را اضافه کنید:
اگر به صفحه جزییات پست بروید احتمالاً این خطا را خواهید دید:
ما میدانیم که چطور این مشکل را حل کنیم! به فایل blog/urls.py
بروید و این الگو را به urlpatterns
اضافه کنید:
صفحه را دوباره بارگذاری کنید، حالا یک خطای جدید داریم:
برای حل این مشکل به فایل blog/views.py
بروید و ویو زیر را به آن اضافه کنید:
به یاد داشته باشید که CommentForm
را در ابتدای فایل فراخوانی کنید:
حالا در صفحه جزییات پست، باید کلید "Add Comment" را ببینید.
با اینحال وقتی روی آن کلیک کنید خطای زیر را خواهید دید:
همانطور که این خطا نشان میدهد، تمپلیتی وجود ندارد بنابراین بیایید یک تمپلیت جدید در blog/templates/blog/add_comment_to_post.html
بسازیم و کد زیر را به آن اضافه کنیم:
وای! حالا خوانندگان شما میتوانند نظرشان را در مورد پستهای وبلاگ شما بنویسند!
مدیریت کامنتها
همه کامنتها نباید نمایش داده شوند. صاحب وبلاگ، مثلاً شما، احتمالاً امکان تأیید یا پاک کردن یک کامنت را لازم دارد. پس بیایید کاری برای این موضوع انجام دهیم:
به فایل blog/templates/blog/post_detail.html
بروید و خطوط زیر را پیدا کنید:
و آنها را به این شکل تغییر دهید:
الان احتمالاً خطای NoReverseMatch
را خواهید دید، چرا که هنوز هیچ URL با الگوی comment_approve
و comment_remove
مطابقت نمیکند.
برای اصلاح این خطا، این الگوها را به فایل blog/urls.py
اضافه کنید:
حالا احتمالاً خطای AttributeError
را خواهید دید. برای اصلاح آن، ویوهای زیر را به فایل blog/views.py
اضافه کنید:
لازم است که مدل Comment
را در ابتدای فایل فراخوانی کنید:
همه چیز کار میکند! فقط یک تغییر کوچک باقی مانده که انجام بدهیم. در صفحه لیست پستها، ما تعداد همه کامنتهایی که هر پست دریافت کرده را میبینیم. بیایید آن را به تعداد کامنتهای تأییدشده تغییر بدهیم.
برای اصلاح این مورد به فایل blog/templates/blog/post_list.html
بروید و خط زیر را پیدا کنید:
و آن را به این شکل تغییر دهید:
حالا این متد را به مدل Post
در فایل blog/models.py
اضافه کنید:
حالا ویژگیهای بخش کامنت کامل شد! تبریک! :-)
Last updated
Was this helpful?