ویوی پست های یک تاپیک

جنگو

سلام

براساس شمای کلی و وایرفریم زیر می خواهیم صفحه ای را بسازیم که در آن تمام پست های یک تاپیک به نمایش درآید.

اول از  همه باید یک سری مسیر به برنامه اضافه کنیم.

myproject/urls.py

همانطور که معلوم است در آدرس دهی بالا، از دو آرگومان استفاده کرده ایم. pk به نمایندگی از شناسۀ بورد و topic_pk به نمایندگی از شناسۀ تاپیک خواهد بود. ویوی آن شبیه این می شود.

boards/views.py (مشاهده کد کامل)

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

templates/topic_posts.html

توجه شود که به جای استفاده از board.name در قالب از مشخصات و متعلقات تاپیک و با استفاده از topic.board.name استفاده کرده ایم.

حالا می خواهیم برای ویوی topic_posts تست بنویسیم.

boards/tests/test_view_topic_posts.py

فایل تست رفته رفته در حال پیچیده تر شدن است. به همین منظور می توان از کلاس انتزاعی جهت استفادۀ دوباره از کدهای مورد نیاز بهره برد.

در حال حاضر تعداد تست ها فراوان بوده و همین موضوع سرعت اجرای تست ها را کند می کند. بنابراین می توان به برنامه دستور داد تا صرفاً فایل تست مربوط به برنامه و اپِ مشخصی را اجرا کند.

و خروجی:

با این کار فقط فایل تست مشخص و خاص را اجرا می کنیم.

و خروجی:

یا حتی صرفاً یک مورد خاص را تست کنیم.

و خروجی:

حال می ده؟! نه؟!

بیا ادامه بدیم.

درون topic_posts.html امکان ساخت یک حلقه برای پست های یک تاپیک وجود دارد.

templates/topic_posts.html

فعلاً راهی برای آپلود عکس کاربران نداریم و بنابراین از یک تصویر خالی بهره می بریم. من از سایت IconFinder یک عکس دانلود و در فولدر static/img ذخیره می کنم.

ما هنوز به معنای واقعی از ORM در جنگو استفاده نکرده ایم؛ اما قطعه کد {{ post.created_by.posts.count }} دستور select count را درون دیتابیس اجرا می کند. حتی اگر نتیجه این کار درست باشد بازهم روش مناسبی نبوده و علت آن، تحمیل بار زیاد به سرور است اما فعلاً نگران آن نباش و صرفاً به نحوۀ تعامل با برنامه دقت کن. به زودی این بخش از برنامه را بهبود می دهم.

قسمت جذاب دیگر این برنامه آن بخشی است که چک می کنیم آیا پست جاری متعلق به کاربری است که به سیستم لاگین کرده {% if post.created_by == user %} و دکمۀ ویرایش (Edit Button) را صرفاً به مالک و ایجادکنندۀ پست نمایش می دهیم.

تا به این لحظه یک آدرس به لیست پست ها را داریم و باید قالب topic.html را با قراردادن یک لینک درون آن به روز رسانی کنیم.

templates/topics.html (مشاهده کد کامل)

ترجمۀ اختصاصی توسط تمدن

 

مطلب بعدی: ویوی پاسخ به پست

مطلب قبلی: دسترسی به کاربر معتبر

بدون دیدگاه

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

جنگو
Function-Based View

سلام بدون هیچ توضیحی و مطابق با آموزش هایی که تا الان ارائه شده است ویوهایی که تا الان نوشته ایم همگی از نوع تابع و به شکل زیر خواهد است… views.py def new_post(request): if request.method == ‘POST’: form = PostForm(request.POST) if form.is_valid(): form.save() return redirect(‘post_list’) else: form = PostForm() …

جنگو
استراتژی ویوهای مبتنی بر کلاس

سلام در این فصل قصد داریم ویوهای برنامه را با استفاده از مفهوم کلاس پیاده سازی کنیم. مسلماً باید به کدهای قبلی برگردیم و بخش هایی از آن را تغییر دهیم. بعد هم به مسائل مهم دیگر مثل صفحه بندی و شماره گذاری صفحات، Markdownها و حتی یک ویرایشگر ساده …

جنگو
مهاجرت

سلام مهاجرت یکی از بخش ها و بحث های بنیادی در برنامه نویسی تحت وب با جنگو است. مهاجرت مربوط به توسعۀ مدل های مربوط به برنامه در شرایطی می شود که بعد از توسعۀ مدل ها، به صورت خودکار دیتابیس نیز خود را با مدل ها بروز رسانی کند …

هرگونه استفادۀ از این آموزش به صورت رایگان و با ارجاع به تمدن جایز است.