質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1112閲覧

Django 検索文字前後の文字列のみを表示させる方法

hiroikawa55

総合スコア26

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/03/08 05:19

編集2020/03/10 04:07

○前提・実現したいこと
Djangoを用いたWebのDBに、文字前後の文字列のみを表示する方法を実装させたいのですが、どのような方法をとればよいでしょうか?
たとえば
[検索文字列]旅館建築
[検索結果]・・・3階建の旅館建築で、建築面積259㎡、屋根は桟瓦葺である・・・
ということです。

○やってみたこと
Django Template内で長い文字列を省略する方法
Django Template 内で長い文字列を省略する

これができるのであれば、Template上で文字列を抽出できないかと思い、<p>{{ item.age|truncatechars:100 }}</p>のところを変えて試しましたが、煮詰まってしまいました・・・。

そもそもTemplateの方で表示を工夫すればよいのか、わからず、お伺いする次第です。
どうぞよろしくお願いいたします。

Django models.py

Python

1from django.db import models 2from django.core import validators 3 4 5class Item(models.Model): 6 7 name = models.CharField( 8 verbose_name='name', 9 max_length=200, 10 ) 11 12 age = models.TextField( 13 verbose_name='age', 14 max_length=500, 15 blank=True, 16 null=True, 17 ) 18 19 # 管理サイト上の表示設定 20 def __str__(self): 21 return self.name

Django filters.py

python

1from django_filters import FilterSet 2from django_filters import filters 3 4from .models import Item 5 6 7class MyOrderingFilter(filters.OrderingFilter): 8 descending_fmt = '%s (降順)' 9 10 11class ItemFilter(FilterSet): 12 13 name = filters.CharFilter(label='名称', lookup_expr='contains') 14 age = filters.CharFilter(label='本文', lookup_expr='contains') 15 16 order_by = MyOrderingFilter( 17 18 fields=( 19 ('name', 'name'), 20 ('age', 'age'), 21 ), 22 field_labels={ 23 'name': '名称', 24 'age': '本文', 25 }, 26 label='並び順' 27 ) 28 29 class Meta: 30 model = Item 31 fields = ('name', 'age', ) 32

Html

1 <div class="row"> 2 <div class="col-12"> 3 <ul class="list-group"> 4 {% for item in item_list %} 5 <li class="list-group-item"> 6 <div class="row"> 7 <div class="col-3"> 8 <p>名称</p> 9 </div> 10 <div class="col-9"> 11 <p>{{ item.name }}</p> 12 </div> 13 <div class="col-3"> 14 <p>本文</p> 15 </div> 16 <div class="col-9"> 17 <p>{{ item.age| truncatechars:100 }}</p> 18 </div> 19 <div class="row"> 20 <div class="col-12"> 21 <div class="float-right"> 22 <a class="btn btn-outline-secondary " href="{% url 'detail' item.pk %}">詳細</a> 23 <a class="btn btn-outline-secondary " href="{% url 'update' item.pk %}">編集</a> 24 <a class="btn btn-outline-secondary " href="{% url 'delete' item.pk %}">削除</a> 25 </div> 26 </div> 27 </div> 28 </li> 29 {% empty %} 30 <li class="list-group-item"> 31 対象のデータがありません 32 </li> 33 {% endfor %} 34 </ul> 35 </div> 36 </div> 37 <div class="row" > 38 <div class="col-12"> 39 <div class="float-right"> 40 <a class="btn btn-outline-secondary" href="{% url 'create' %}">新規</a> 41 <a class="btn btn-outline-secondary" data-toggle="modal" data-target="#myModal" href="#">検索</a> 42 </div> 43 </div> 44 </div> 45</div> 46{% endblock %}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

検索文字を含む一文を取り出し表示するというのはどうでしょうか。

python

1# https://docs.python.org/ja/3/whatsnew/3.8.html#assignment-expressions より引用 2s = '大きな構文の一部として、変数に値を割り当てる新しい構文 := が追加されました。この構文は セイウチの目と牙 に似ているため、「セイウチ演算子」の愛称で知られています。以下の例では、代入式により len() 関数を二重に呼びだすことを回避しています。' 3s_l = s.split('。') 4word = 'セイウチ' 5for i in s_l: 6 if word in i: 7 print(i) 8 9#出力: この構文は セイウチの目と牙 に似ているため、「セイウチ演算子」の愛称で知られています

句点で文章を切り出して、切り出した文に検索文字が含まれていれば文を出力しています。
これで取り出した文をテンプレートに渡せば簡単に表示できると思います。

投稿2020/03/10 06:09

mistn

総合スコア1191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroikawa55

2020/03/11 13:24

大変ありがとうございます。 教えいていただいたコードで、やりたかったことができるようになりました。 驚いたのは、特別な方法ではなく、”。”で切ってループで目的が満たせたことです。 発想が大事なのだと、あらためて思いました。精進したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問