以下のようなモデルがあります。
model.py
python
1class Post(models.Model): 2 user = models.ForeignKey(User, on_delete=models.CASCADE) 3 tag = models.CharField(max_length=255, null=True, db_index=True, blank=True) 4 title = models.CharField(max_length=255) 5 content = models.TextField()
これを単純にテンプレートで表示するには、viewに以下のように記述すれば達成出来ます。
views.py
python
1class PostDetailView(DetailView): 2 model = Post 3 4 def get_object(self, queryset=None): 5 obj = super().get_object(queryset=queryset) 6 if not obj.is_public and not self.request.user.is_authenticated: 7 raise Http404 8 return obj
しかし、tagフィールドには、以下のようなデータが入る事を想定しています。
python
1tag = "ruby python java java 日本語 test django rails"
期待する動作としては、空白でタグを区切り、重複を除外するという事です。
これ自体は以下のコードで実行出来ます。また、タグの最大個数を5個までとし、それ以上は取り出さないようにします。
python
1tags = tag.split(' ') 2tag_list = [] 3for i, val in enumerate(tags): 4 tags[i] = val.strip() 5 if not tags[i] in tag_list: 6 tag_list.append(tags[i]) 7tag_list = tag_list[:5]
結果
python
1tag_list = ['ruby', 'python', 'java', '日本語', 'test']
これをtemplate側でfor文で取り出し、リンクをつければ立派なタグ機能が完成するのはわかるのですが、DetailViewにどのように記述したら、tag_listをテンプレート側に渡せるのかが分かりません。
どなたかアドバイス頂けないでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/29 15:40
2020/05/29 21:17
退会済みユーザー
2020/05/30 01:13