[Django]検索機能を実装しよう!
こちらのブログを全く書いてなくてすみません。今日は運営しているリレー小説サービス"Hundread -みんなでつくる小説投稿"でも取り入れた検索機能について書いていこうと思います。
環境:Django2.1
検索機能
さてさて、まずはモデルを作っていきます。
class Post(models.Model): title = models.CharField(max_length=100) article = models.TextField(max_length=10000) posted_date = models.DateTimeField(auto_now_add=True) class Meta: ordering = ['-posted_date',] def __str__(self): return self.title
次にviews.pyを編集していきます。
from django.db.models import Q class PostListView(PaginationMixin, generic.ListView): template_name = "posts/list.html" model = Post #Serch def get_queryset(self): result = super(PostListView, self).get_queryset() query = self.request.GET.get('q') if query: result = Post.objects.filter(Q(title__icontains=query)) return result
urls.pyは小細工なしに
path('', views.PostListView.as_view(), name='list'),
問題はテンプレートですね。と言っても難しいことはしてなくて、
<form class="navbar-item field has-addons" action="{% url "posts:list" %}" method="get" accept-charset="utf-8"> <div class="control"> <input class="input" type="text" name="q" placeholder="検索..."> </div> <div class="control"> <button class="button is-info" type="submit"><span class="icon"><i class="fas fa-search"></i></span></button> </div> </form> <div class="container"> {% for post in post_list %} <div class="box"> <article class="media"> <div class="media-content"> <div class="content"> <p> <strong>{{ post.title|truncatechars_html:35 }}</strong> </p> </div> </div> </article> </div> {% endfor %} </div>
こんな感じでうまくいくと思います。
何かあればこちらにtwitter(じぇい👨💻 (@jyouj__) | Twitter)