###実現したいこと
DjangoのCRUDアプリにて、投稿記事のカテゴリに合わせたアイコンを表示したいと考えております。
後述のapp/index.htmlの"アイコン部分"に記載の通り、if文を使えば変数categoryに合った画像を表示してくれるかと思いましたが、画像読み込みに失敗した際の画像(参考画像の虫眼鏡マーク)しか表示されません。
なお、views.pyにてprint(post_data.category)を入力し、category名がcategory1となっていることを確認しております。
これ以上どこに問題があるかがわからず、ご知見いただけますと幸いです。
###各種コード
必要と思う部分のみ記載しております。
情報に不足ありましたらご指摘いただけますと幸いです。
HTML(記事一覧ページ)
app/index.html
HTML
1<div class="col-md-8"> 2 <div class="author-created"> 3 <h7 class="text_left"> 4 {% if post.author.icon %} 5 <img src="{{ post.author.icon.url }}" class="user-icon-top"> 6 {% else %} 7 <img src="{% static 'img/user1.png' %}" class="user-icon-top"> 8 {% endif %} 9 {{ post.author }} 10 </h7> 11 <h7 class="text_right">{{ post.created }}</h7> 12 </div> 13 <div class="article-container"> 14 <h3>{{ post.title|truncatechars:17}}</h3> 15 <!--アイコン部分--> 16 <div> 17 {% if post_data.category == "category1" %} 18 <img src="{% static 'img/category1.png' %}" alt="カテゴリ1" class=""article-category-icon> 19 {% elif post_data.category == "category2" %} 20 <img src="{% static 'img/category2.png' %}" alt="カテゴリ2" class="article-category-icon"> 21 {% elif post_data.category == "category3" %} 22 <img src="{% static 'img/category3.png' %}" alt="カテゴリ3" class="article-category-icon"> 23 {% else %} 24 <img src="{% static 'img/search.png' %}" alt="該当カテゴリなし" class="article-category-icon"> 25 {% endif %} 26 </div> 27 </div> 28</div>
views.py
python
1from django.http import JsonResponse 2from django.views.generic import View 3from django.shortcuts import render,redirect, get_object_or_404 4from .models import Post, Category 5from .forms import PostForm 6from django.contrib.auth.mixins import LoginRequiredMixin 7 8class IndexView(View): 9 def category_select(self, post_data, category): 10 if category == "all" : 11 post_data = post_data 12 elif category != None : 13 category_data = Category.objects.get(slug=category) 14 post_data = post_data.filter(category=category_data) 15 elif category is None : 16 post_data = post_data 17 return post_data 18 19 def get(self, request, *args, **kwargs): 20 post_data = Post.objects.order_by("-id") 21 category = self.kwargs.get('category') 22 post_data = self.category_select(post_data, category) 23 24 return render(request, 'app/index.html', { 25 'post_data': page_obj.object_list, 26 'page_obj': page_obj, 27 'category': category, 28 })
models.py
python
1from django.conf import settings 2from django.db import models 3from django.utils import timezone 4 5class Category(models.Model): 6 name = models.CharField("カテゴリ", max_length=100) 7 slug = models.SlugField("スラッグ") 8 9 def __str__(self): 10 return self.name 11 12class Post(models.Model): 13 author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 14 category = models.ForeignKey(Category, verbose_name='カテゴリ', on_delete=models.CASCADE) 15 title = models.CharField("タイトル", max_length=200) 16 image = models.ImageField(upload_to='images', verbose_name='Image画像', null=True, blank=True) 17 content = models.TextField("本文") 18 created = models.DateTimeField("作成日", default=timezone.now) 19 20 def __str__(self): 21 return self.title
forms.py
python
1from django import forms 2from .models import Category 3 4class PostForm(forms.Form): 5 6 category_data = Category.objects.all() 7 category_choice = {} 8 for category in category_data: 9 category_choice[category] = category 10 11 title = forms.CharField(max_length=50, label='タイトル') 12 category = forms.ChoiceField(label='カテゴリ', widget=forms.Select, choices=list(category_choice.items())) 13 content = forms.CharField(label='内容', widget=forms.Textarea()) 14 image = forms.ImageField(label='イメージ画像', required=False) 15 print(category) 16
###試したこと
・index.htmlのif文を削除し、category1.pngを呼びだすコードのみに変更
→category1.png画像が表示されたため、画像へのルーティングに問題があるわけではないと考えます。
###環境
HTML5
Bootstrap 4.7.0
Python 3.6.3
Django 2.2.16
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/28 15:03