質問編集履歴

2

説明の改善

2020/03/10 04:07

投稿

hiroikawa55
hiroikawa55

スコア26

test CHANGED
@@ -1 +1 @@
1
- Django Template 内で検索文字列の前後で、長い文字列を省略す
1
+ Django 検索文字前後文字列のみ表示させ方法
test CHANGED
@@ -1,20 +1,34 @@
1
+ **○前提・実現したいこと**
2
+
3
+ Djangoを用いたWebのDBに、文字前後の文字列のみを表示する方法を実装させたいのですが、どのような方法をとればよいでしょうか?
4
+
5
+ たとえば
6
+
7
+ [検索文字列]旅館建築
8
+
9
+ [検索結果]・・・3階建の**旅館建築**で、建築面積259㎡、屋根は桟瓦葺である・・・
10
+
11
+ ということです。
12
+
13
+
14
+
15
+ ○やってみたこと
16
+
1
- Django Template内で長い文字列を省略する方法がありますが、
17
+ Django Template内で長い文字列を省略する方法
2
18
 
3
19
  [Django Template 内で長い文字列を省略する](https://www.monotalk.xyz/blog/django-template-%E5%86%85%E3%81%A7%E9%95%B7%E3%81%84%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E7%9C%81%E7%95%A5%E3%81%99%E3%82%8B/)
4
20
 
5
-
6
-
7
- これに検索フィルターを組み合わせて、
21
+
8
-
22
+
9
- 検索文字列前後で、長い文字列を省略する方法はあるでしょうか?
23
+ これができるのであればTemplate上で文字列を抽出きないかと思い、<p>{{ item.age|truncatechars:100 }}</p>のところを変えて試ましたが、煮詰まってしまいました・・・。
10
-
11
- たとえば
24
+
12
-
13
- [検索文字列]旅館建築
25
+
14
-
26
+
15
- [検索結果]・・・3階建**旅館建築**で、建築面積259㎡屋根は桟瓦葺ある・・・
27
+ そもそもTemplate表示を工夫すればよいのかわからずお伺いする次第す。
16
-
28
+
17
- うことです。
29
+ どうぞよろしくお願いたします。
30
+
31
+
18
32
 
19
33
  Django models.py
20
34
 
@@ -136,14 +150,6 @@
136
150
 
137
151
 
138
152
 
139
- **検討した方法**:
140
-
141
-  Template上で文字列を抽出できないかと思い、<p>{{ item.age| truncatechars:100 }}</p>のところを変えて試しましたが、よい方法が見つかりませんでした。
142
-
143
-
144
-
145
-
146
-
147
153
  ```Html
148
154
 
149
155
  <div class="row">
@@ -239,9 +245,3 @@
239
245
  {% endblock %}
240
246
 
241
247
  ```
242
-
243
-
244
-
245
- そもそもTemplateの方で表示を工夫すればよいのか、わからず、お伺いする次第です。
246
-
247
- どうぞよろしくお願いいたします。

1

書式、内容の改善

2020/03/10 04:07

投稿

hiroikawa55
hiroikawa55

スコア26

test CHANGED
File without changes
test CHANGED
@@ -16,48 +16,232 @@
16
16
 
17
17
  ということです。
18
18
 
19
-
20
-
21
- viewsの方で絞り込みをかけるのか(かける方法があるのか)
19
+ Django models.py
22
-
20
+
23
- ```python views
21
+ ```Python
22
+
24
-
23
+ from django.db import models
24
+
25
+ from django.core import validators
26
+
27
+
28
+
29
+
30
+
25
- class ItemFilterView(LoginRequiredMixin, FilterView):
31
+ class Item(models.Model):
32
+
33
+
34
+
26
-
35
+ name = models.CharField(
36
+
37
+ verbose_name='name',
38
+
39
+ max_length=200,
40
+
41
+ )
42
+
43
+
44
+
45
+ age = models.TextField(
46
+
47
+ verbose_name='age',
48
+
49
+ max_length=500,
50
+
51
+ blank=True,
52
+
27
- model = Item
53
+ null=True,
28
-
29
-
30
-
54
+
31
- filterset_class = ItemFilter
55
+ )
32
-
56
+
57
+
58
+
33
- strict = False
59
+ # 管理サイト上の表示設定
34
-
35
-
36
-
60
+
37
- def get(self, request, **kwargs):
61
+ def __str__(self):
38
-
62
+
39
- if request.GET:
63
+ return self.name
40
-
41
- request.session['query'] = request.GET
42
-
43
- else:
44
-
45
- request.GET = request.GET.copy()
46
-
47
- if 'query' in request.session.keys():
48
-
49
- for key in request.session['query'].keys():
50
-
51
- request.GET[key] = request.session['query'][key]
52
-
53
-
54
-
55
- return super().get(request, **kwargs)
56
64
 
57
65
  ```
58
66
 
59
-
67
+ Django filters.py
68
+
60
-
69
+ ```python
70
+
71
+ from django_filters import FilterSet
72
+
73
+ from django_filters import filters
74
+
75
+
76
+
77
+ from .models import Item
78
+
79
+
80
+
81
+
82
+
83
+ class MyOrderingFilter(filters.OrderingFilter):
84
+
85
+ descending_fmt = '%s (降順)'
86
+
87
+
88
+
89
+
90
+
91
+ class ItemFilter(FilterSet):
92
+
93
+
94
+
95
+ name = filters.CharFilter(label='名称', lookup_expr='contains')
96
+
97
+ age = filters.CharFilter(label='本文', lookup_expr='contains')
98
+
99
+
100
+
101
+ order_by = MyOrderingFilter(
102
+
103
+
104
+
105
+ fields=(
106
+
107
+ ('name', 'name'),
108
+
109
+ ('age', 'age'),
110
+
111
+ ),
112
+
113
+ field_labels={
114
+
115
+ 'name': '名称',
116
+
117
+ 'age': '本文',
118
+
119
+ },
120
+
121
+ label='並び順'
122
+
123
+ )
124
+
125
+
126
+
127
+ class Meta:
128
+
129
+ model = Item
130
+
131
+ fields = ('name', 'age', )
132
+
133
+
134
+
135
+ ```
136
+
137
+
138
+
139
+ **検討した方法**:
140
+
141
+  Template上で文字列を抽出できないかと思い、<p>{{ item.age| truncatechars:100 }}</p>のところを変えて試しましたが、よい方法が見つかりませんでした。
142
+
143
+
144
+
145
+
146
+
147
+ ```Html
148
+
149
+ <div class="row">
150
+
151
+ <div class="col-12">
152
+
153
+ <ul class="list-group">
154
+
155
+ {% for item in item_list %}
156
+
157
+ <li class="list-group-item">
158
+
159
+ <div class="row">
160
+
161
+ <div class="col-3">
162
+
163
+ <p>名称</p>
164
+
165
+ </div>
166
+
167
+ <div class="col-9">
168
+
169
+ <p>{{ item.name }}</p>
170
+
171
+ </div>
172
+
173
+ <div class="col-3">
174
+
175
+ <p>本文</p>
176
+
177
+ </div>
178
+
179
+ <div class="col-9">
180
+
181
+ <p>{{ item.age| truncatechars:100 }}</p>
182
+
183
+ </div>
184
+
185
+ <div class="row">
186
+
187
+ <div class="col-12">
188
+
189
+ <div class="float-right">
190
+
191
+ <a class="btn btn-outline-secondary " href="{% url 'detail' item.pk %}">詳細</a>
192
+
193
+ <a class="btn btn-outline-secondary " href="{% url 'update' item.pk %}">編集</a>
194
+
195
+ <a class="btn btn-outline-secondary " href="{% url 'delete' item.pk %}">削除</a>
196
+
197
+ </div>
198
+
199
+ </div>
200
+
201
+ </div>
202
+
203
+ </li>
204
+
205
+ {% empty %}
206
+
207
+ <li class="list-group-item">
208
+
209
+ 対象のデータがありません
210
+
211
+ </li>
212
+
213
+ {% endfor %}
214
+
215
+ </ul>
216
+
217
+ </div>
218
+
219
+ </div>
220
+
221
+ <div class="row" >
222
+
223
+ <div class="col-12">
224
+
225
+ <div class="float-right">
226
+
227
+ <a class="btn btn-outline-secondary" href="{% url 'create' %}">新規</a>
228
+
229
+ <a class="btn btn-outline-secondary" data-toggle="modal" data-target="#myModal" href="#">検索</a>
230
+
231
+ </div>
232
+
233
+ </div>
234
+
235
+ </div>
236
+
237
+ </div>
238
+
239
+ {% endblock %}
240
+
241
+ ```
242
+
243
+
244
+
61
- Templateの方で表示を工夫すればよいのか、わからず、お伺いする次第です。
245
+ そもそもTemplateの方で表示を工夫すればよいのか、わからず、お伺いする次第です。
62
246
 
63
247
  どうぞよろしくお願いいたします。