سلام شاید از قبل متوجه این موضوع شده باشید که وقتی فردی پاسخی را برای یک پست ارسال می کند فیلد last_update بروز رسانی نمی شود. حالا می خواهیم این مورد را درست کنیم. boards/views.py @login_required def reply_topic(request, pk, topic_pk): topic = get_object_or_404(Topic, board__pk=pk, pk=topic_pk) if request.method == ‘POST’: form …
سلام یکی از ساده ترین راه ها برای اضافه کردن تصویر پروفایل استفاده از Gravatar است. داخل فولدر boards/templatetags فایلی با نام gravatar.py ایجاد می کنیم. boards/templatetags/gravatar.py import hashlib from urllib.parse import urlencode from django import template from django.conf import settings register = template.Library() @register.filter def gravatar(user): email = user.email.lower().encode(‘utf-8’) …
سلام برای اینکه برنامه همهفهمتر شود؛ پکیج هایی به صورت پیشفرض در جنگو ساخته شده است. برای مثال می خواهیم فیلد زمان و تاریخ را طبیعیتر کنیم. به جای اینکه تمام دیتای خود را نمایش دهیم؛ می نویسیم «دو دقیقه پیش» در اولین گام django.contrib.humanize را به INSTALLED_APPS اضافه می …
سلام می خواهیم از یک ویرایشگر Markdown خیلی باحال به اسم SimpleMD استفاده کنیم. در ابتدا یا کتابخانۀ جاوا اسکریپت آن را دانلود یا از CDNشان استفاده می کنیم. <link rel=”stylesheet” href=”https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css”> <script src=”https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js”></script> هم می توان دو خط بالا را به فایل base.html اضافه کرد و هم این دو …
سلام می خواهیم تجربه کاربری را با اضافه کردن markdown به قسمت متنی (textarea) فرم بهبود دهیم. این کار بسیار ساده و آسان خواهد بود. ابتدا کتابخانه Python-Markdown را نصب می کنیم. pip install markdown حالا می خواهیم به مدل Post یک متد اضافه می کنیم. boards/models.py (مشاهده کد کامل) …
سلام مشابه با آنچه در خصوص قالب form.html انجام شد؛ می توانیم تغییرات مشابهی را برای صفحه بندی و شماره گذاری صفحات انجام دهیم. برای این کار ابتدا صفحات پست های یک تاپیک را صفحه گذاری کرده و سپس دنبال راهی برای قابلیت استفاده مجدد در کامپوننت صفحه بندی پیدا …
سلام خیلی خوب! حالا نوبت آن رسیده تا آخرین ویوی برنامه را بروزرسانی کنیم. بعد از این کار صرفاً به بهبود ویوهای موجود می پردازیم. accounts/views.py (مشاهده کد کامل) from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User from django.urls import reverse_lazy from django.utils.decorators import method_decorator from django.views.generic import UpdateView @method_decorator(login_required, …
سلام در ادامه پیاده سازی مشابهی را و البته با استفاده از ListView می بینیم. boards/views.py (مشاهده کد کامل) class TopicListView(ListView): model = Topic context_object_name = ‘topics’ template_name = ‘topics.html’ paginate_by = 20 def get_context_data(self, **kwargs): kwargs[‘board’] = self.board return super().get_context_data(**kwargs) def get_queryset(self): self.board = get_object_or_404(Board, pk=self.kwargs.get(‘pk’)) queryset = self.board.topics.order_by(‘-last_updated’).annotate(replies=Count(‘posts’) …
سلام کد زیر مربوط به پیاده سازی صفحه بندی با استفاده از توابع است. boards/views.py (مشاهده کد کامل) from django.db.models import Count from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.shortcuts import get_object_or_404, render from django.views.generic import ListView from .models import Board def board_topics(request, pk): board = get_object_or_404(Board, pk=pk) queryset = …
سلام این کار با استفاده از CBV بسیار آسان است. اما قبل از آن می خواهیم صفحه بندی مطالب را به صورت دستی انجام دهیم تا از مکانیسم واقعی آن آگاهی پیدا کنی و سپس از تکنولوژی CBV بهره برداری می کنیم. از الآن به بعد روی ویوی board_topics کار …