teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

説明文を大幅に書き換えました。

2017/09/14 07:55

投稿

superyamadaman
superyamadaman

スコア13

title CHANGED
File without changes
body CHANGED
@@ -1,32 +1,13 @@
1
1
  現在、djangoにおいてbootstrapを使用した簡単なブログサイトを構築中です。
2
2
 
3
- この作業において、自分が使用予定のbootstrapテーマのhtmlが以下のような構造になっているのですが、
4
- この構造において、{% for post in posts %}などのループを使用して、{{ post.title }}に順々にブログのタイトルを当てはめていく方法が分かりません。
3
+ このブログ築において、自分が使用予定のbootstrapテーマのhtmlが以下のような構造になっているのですが、この構造において、{% for post in posts %}などのループを使用して、{{ post.title }}に順々にブログのタイトルを当てはめていく方法が分かりません。
5
4
 
6
- 下記がdjangoにおけるタイトルの表示を構成する最低限のファイル構成かと思うのですが、
7
- れらにどのような要素追加、もしくは変更すればよいでしょうか。
5
+ この方法ご教示頂けませんでしょうか。
8
6
 
9
- この解決策として、このhtml構成においてはループの使用が難しいのではないかと考え、{% for post in posts %}を外して、{{ post.title }}の部分に、フィルターや引数などを入れることを行ってみたのですが、うまくいきませんでした。
10
- 初心者のため、拙い質問で誠恐れ入りますが、ご教示頂ければ嬉く思います。
7
+ 以下問題の説明用の簡単なサンプルコードとサイトのデザインイメージを記載致します。
11
8
 
9
+ ![イメージ説明](ad4f0e6670c8071a196329c0aea4001a.png)
12
10
  ```ここに言語を入力
13
- model.py
14
-
15
- class Post(models.Model):
16
- STATUS_CHOICES = (
17
- ('draft', 'Draft'),
18
- ('published', 'Published'),
19
- )
20
- title = models.CharField(max_length=250)
21
-
22
- view.py
23
-
24
- class PostListView(ListView):
25
- queryset = Post.published.all()
26
- context_object_name = 'posts'
27
- paginate_by = 10
28
- template_name = 't_env/post/list.html'
29
-
30
11
  list.html
31
12
 
32
13
  <body>
@@ -44,7 +25,63 @@
44
25
  </div>
45
26
  </div>
46
27
  </body>
28
+ ```
29
+ gjangoにおいてブログの記事タイトルやサマリーをタグで当てはめる方法として、書籍やネット上記事では、ブログ記事のタイトルや著者、本文の要約部分を一括りにして、ループで挟む方法をよく見かけます。
30
+ この方法を参考にして、以下の3つの方法を行ってみたのですが、それぞれに問題があり、自分のやりたいことが実現できません。
47
31
 
32
+ 0. <div class="box-sample">をループで挟む方法。
33
+ →この方法の場合、添付画像のデザイン自体がループすることになり、自分の考えているデザインとは違ったデザインになってしまいます。
48
34
 
35
+ 0. {{ post.title }}のタイトルのすぐ上にある<div class="box-sample-*">にクラスを与え、一括りにしてループで挟む方法。
36
+ →例えば<div class="box-sample-1">を挟むと、<div class="box-sample-1">がループするので、デザインが崩れてしまいます。
37
+ 0. <div class="box-sample-1">や<div class="box-sample-2-2">などのそれぞれの要素ごとにループを適用する方法
38
+ →当然のことながら、各要素に最新の**同じ記事タイトル**が表示される結果になります。
39
+
40
+ 上記以外の解決策として、このhtml構成においてはループの使用がそもそも難しいと考え、ループで挟むことを止め、{{ post.title }}にフィルターや引数などを入れることで、ブログタイトルを順に表示させることはできないか考えました。この考えを基にして、適用できそうなフィルターや引数を探してみたのですが、見つけることができませんでした。
41
+
42
+ 下記にdjangoにおけるHTML以外のファイル構成と内容を記載致しますので、これらのファイルにどのような要素を追加、もしくは変更すればよいがご教示頂けませんでしょうか。
43
+
44
+ プログラミング初心者のため、誠に拙い説明で申し訳ございませんが、何卒ご教示のほど宜しくお願い致します。
45
+
46
+ ```ここに言語を入力
47
+ model.py
48
+
49
+ from django.db import models
50
+ from django.utils import timezone
51
+ from django.contrib.auth.models import User
52
+ from django.core.urlresolvers import reverse
53
+
54
+ class Post(models.Model):
55
+ STATUS_CHOICES = (
56
+ ('draft', 'Draft'),
57
+ ('published', 'Published'),
58
+ )
59
+ title = models.CharField(max_length=250)
60
+
61
+ class Meta:
62
+ ordering = ('-publish',)
63
+
64
+ def __str__(self):
65
+ return self.title
66
+
67
+ view.py
68
+
69
+ rom django.shortcuts import render, get_object_or_404
70
+ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
71
+ from django.views.generic import ListView
72
+
73
+ class PostListView(ListView):
74
+ queryset = Post.published.all()
75
+ context_object_name = 'posts'
76
+ paginate_by = 10
77
+ template_name = 't_env/post/list.html'
78
+
79
+ def post_detail(request, year, month, day, post):
80
+ post = get_object_or_404(Post, slug=post,
81
+ status='published',
82
+ publish__year=year,
83
+ publish__month=month,
84
+ publish__day=day)
85
+ return render(request, 't_env/post/detail.html', {'post': post})
86
+
49
- ```
87
+ ```
50
- ![イメージ説明](34545ee77f2e4b1f39bbc1d5e6a0ae4e.png)

3

説明に使用するhtmlを改め、htmlの出力後のイメージを追加しました。また、日本語の説明文を変更しました。

2017/09/14 07:55

投稿

superyamadaman
superyamadaman

スコア13

title CHANGED
File without changes
body CHANGED
@@ -1,11 +1,14 @@
1
- 現在、djangobootstrapを使用した簡単なブログサイトを構築中です。
1
+ 現在、djangoにおいてbootstrapを使用した簡単なブログサイトを構築中です。
2
- この作業において、自分が使用予定のbootstrapテーマのhtmlが少し複雑な構造になっているため、
3
- html内のループによる表示が難しいのではないかと考えています。
4
2
 
5
- 仮にループを使用せずに、テンプレート上にブログのタイトルを最新のものから順に表示しようとした場合、models.py または view.py において、配列に格納されたタイトルデータを一つづつ取り出して、html内にタグまたは変数を埋め込むことにより、それぞれの記事のタイトルを表示させることができないかと考えたのですが、実現方法が分かりません。
6
- 下記がdjangoにおけるタイトル表示を成す最低限要素かと思うのですが、
3
+ この作業において、自分が使用予定bootstrapテーマのhtmlが以下のような造になっているのですが、
7
- 下記以外にどのような要素追加、も変更すればよでしょうか。
4
+ この構造おいて、{% for post in posts %}などのループ使用て、{{ post.title }}に順々にブログのタイトルを当てめてく方法が分りません
8
5
 
6
+ 下記がdjangoにおけるタイトルの表示を構成する最低限のファイル構成かと思うのですが、
7
+ これらのにどのような要素を追加、もしくは変更すればよいでしょうか。
8
+
9
+ この解決策として、このhtml構成においてはループの使用が難しいのではないかと考え、{% for post in posts %}を外して、{{ post.title }}の部分に、フィルターや引数などを入れることを行ってみたのですが、うまくいきませんでした。
10
+ 初心者のため、拙い質問で誠に恐れ入りますが、ご教示頂ければ嬉しく思います。
11
+
9
12
  ```ここに言語を入力
10
13
  model.py
11
14
 
@@ -24,25 +27,24 @@
24
27
  paginate_by = 10
25
28
  template_name = 't_env/post/list.html'
26
29
 
27
- base.html
30
+ list.html
28
31
 
29
32
  <body>
30
- <div id="content">
33
+ <div class="box-sample">
34
+ <div class="box-sample-1">
35
+ <p>{{ post.title }} </p> <!--タイトルその1-->
31
- {% block content %}
36
+ </div>
32
- {% endblock %}
37
+ <div class="box-sample-2">
38
+ <div class="box-sample-2-1">
39
+ <p>{{ post.title }}</p> <!--タイトルその2-->
33
40
  </div>
41
+ <div class="box-sample-2-2">
42
+ <p>{{ post.title }}</p> <!--タイトルその3-->
43
+ </div>
44
+ </div>
45
+ </div>
34
46
  </body>
35
47
 
36
- list.html
37
48
 
38
- {% block content %}
39
-
40
- {% for post in posts %}
41
- <p>{{ post.title }}</p>
42
- {% endfor %}
43
-
44
- {% endblock %}
45
-
46
49
  ```
47
- 私の試行錯誤として、list.htmlの中の {% for post in posts %}を外したあと、{{ post.title }}の部分に、フィルターや引数などを設定するとうまくいくかと思ったのですが、うまくいきませんでした。
48
- 初心者のため、拙い質問で誠に恐れ入りますが、ご教示頂ければ嬉しく思います。
50
+ ![イメージ説明](34545ee77f2e4b1f39bbc1d5e6a0ae4e.png)

2

日本の説明文を改めました。

2017/09/14 06:32

投稿

superyamadaman
superyamadaman

スコア13

title CHANGED
@@ -1,1 +1,1 @@
1
- djangoとbootstrapを使用したブログサイトにおける、タイトル表示に関す質問
1
+ djangoのtemplate内において、loopを使わずにブログタイトルを1つづつ表示させ
body CHANGED
File without changes

1

説明が不足していたため、日本語の表現を少し改めました。

2017/09/13 15:11

投稿

superyamadaman
superyamadaman

スコア13

title CHANGED
File without changes
body CHANGED
@@ -1,10 +1,10 @@
1
1
  現在、djangoとbootstrapを使用した簡単なブログサイトを構築中です。
2
- この作業において、自分が使用予定のbootstrapテーマのhtmlが少し複雑な構造になっており
2
+ この作業において、自分が使用予定のbootstrapテーマのhtmlが少し複雑な構造になっているため
3
- html内のループによってブログのタイトルを表示させることができずに困っています。
3
+ html内のループによ表示が難しいのはないかと考えています。
4
4
 
5
- 問題解決方法として、配列に格納されたタイトルデータを一つづつ取り出して、html内にタグまたは変数を埋め込むことにより、それぞれの記事のタイトルを表示させることができないかと考えたのですが、実現方法が分かりません。
5
+ 仮にループを使用せずに、テンプレート上にブログタイトルを最新ものから順に表示しようとした場合、models.py または view.py において、配列に格納されたタイトルデータを一つづつ取り出して、html内にタグまたは変数を埋め込むことにより、それぞれの記事のタイトルを表示させることができないかと考えたのですが、実現方法が分かりません。
6
6
  下記がdjangoにおけるタイトルの表示を構成する最低限の要素かと思うのですが、
7
- 下記以外にどのような要素を追加すればよいでしょうか。
7
+ 下記以外にどのような要素を追加、もしくは変更すればよいでしょうか。
8
8
 
9
9
  ```ここに言語を入力
10
10
  model.py
@@ -44,4 +44,5 @@
44
44
  {% endblock %}
45
45
 
46
46
  ```
47
- {{ post.title }}の部分に、フィルターや引数などを設定するとうまくいくかと思ったのですが、うまくいきませんでした。初心者のため、拙い質問で誠に恐れ入りますが、ご教示頂ければ嬉しく思います。
47
+ 私の試行錯誤として、list.htmlの中の {% for post in posts %}を外したあと、{{ post.title }}の部分に、フィルターや引数などを設定するとうまくいくかと思ったのですが、うまくいきませんでした。
48
+ 初心者のため、拙い質問で誠に恐れ入りますが、ご教示頂ければ嬉しく思います。