現在、djangoにおいてbootstrapを使用した簡単なブログサイトを構築中です。
このブログ構築において、自分が使用予定のbootstrapテーマのhtmlが以下のような構造になっているのですが、この構造において、{% for post in posts %}などのループを使用して、{{ post.title }}に順々にブログのタイトルを当てはめていく方法が分かりません。
この方法をご教示頂けませんでしょうか。
以下に問題の説明用の簡単なサンプルコードとサイトのデザインイメージを記載致します。
list.html <body> <div class="box-sample"> <div class="box-sample-1"> <p>{{ post.title }} </p> <!--タイトルその1--> </div> <div class="box-sample-2"> <div class="box-sample-2-1"> <p>{{ post.title }}</p> <!--タイトルその2--> </div> <div class="box-sample-2-2"> <p>{{ post.title }}</p> <!--タイトルその3--> </div> </div> </div> </body>
gjangoにおいてブログの記事タイトルやサマリーをタグで当てはめる方法として、書籍やネット上記事では、ブログ記事のタイトルや著者、本文の要約部分を一括りにして、ループで挟む方法をよく見かけます。
この方法を参考にして、以下の3つの方法を行ってみたのですが、それぞれに問題があり、自分のやりたいことが実現できません。
- <div class="box-sample">をループで挟む方法。
→この方法の場合、添付画像のデザイン自体がループすることになり、自分の考えているデザインとは違ったデザインになってしまいます。
- {{ post.title }}のタイトルのすぐ上にある<div class="box-sample-*">にクラスを与え、一括りにしてループで挟む方法。
→例えば<div class="box-sample-1">を挟むと、<div class="box-sample-1">がループするので、デザインが崩れてしまいます。
0. <div class="box-sample-1">や<div class="box-sample-2-2">などのそれぞれの要素ごとにループを適用する方法
→当然のことながら、各要素に最新の同じ記事タイトルが表示される結果になります。
上記以外の解決策として、このhtml構成においてはループの使用がそもそも難しいと考え、ループで挟むことを止め、{{ post.title }}にフィルターや引数などを入れることで、ブログタイトルを順に表示させることはできないか考えました。この考えを基にして、適用できそうなフィルターや引数を探してみたのですが、見つけることができませんでした。
下記にdjangoにおけるHTML以外のファイル構成と内容を記載致しますので、これらのファイルにどのような要素を追加、もしくは変更すればよいがご教示頂けませんでしょうか。
プログラミング初心者のため、誠に拙い説明で申し訳ございませんが、何卒ご教示のほど宜しくお願い致します。
model.py from django.db import models from django.utils import timezone from django.contrib.auth.models import User from django.core.urlresolvers import reverse class Post(models.Model): STATUS_CHOICES = ( ('draft', 'Draft'), ('published', 'Published'), ) title = models.CharField(max_length=250) class Meta: ordering = ('-publish',) def __str__(self): return self.title view.py rom django.shortcuts import render, get_object_or_404 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.views.generic import ListView class PostListView(ListView): queryset = Post.published.all() context_object_name = 'posts' paginate_by = 10 template_name = 't_env/post/list.html' def post_detail(request, year, month, day, post): post = get_object_or_404(Post, slug=post, status='published', publish__year=year, publish__month=month, publish__day=day) return render(request, 't_env/post/detail.html', {'post': post})
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/14 07:57
2017/09/14 09:57 編集