質問編集履歴
4
説明文を大幅に書き換えました。
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
|
+

|
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
|
-

|
3
説明に使用するhtmlを改め、htmlの出力後のイメージを追加しました。また、日本語の説明文を変更しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,11 +1,14 @@
|
|
1
|
-
現在、django
|
1
|
+
現在、djangoにおいてbootstrapを使用した簡単なブログサイトを構築中です。
|
2
|
-
この作業において、自分が使用予定のbootstrapテーマのhtmlが少し複雑な構造になっているため、
|
3
|
-
html内のループによる表示が難しいのではないかと考えています。
|
4
2
|
|
5
|
-
仮にループを使用せずに、テンプレート上にブログのタイトルを最新のものから順に表示しようとした場合、models.py または view.py において、配列に格納されたタイトルデータを一つづつ取り出して、html内にタグまたは変数を埋め込むことにより、それぞれの記事のタイトルを表示させることができないかと考えたのですが、実現方法が分かりません。
|
6
|
-
|
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
|
-
|
30
|
+
list.html
|
28
31
|
|
29
32
|
<body>
|
30
|
-
|
33
|
+
<div class="box-sample">
|
34
|
+
<div class="box-sample-1">
|
35
|
+
<p>{{ post.title }} </p> <!--タイトルその1-->
|
31
|
-
|
36
|
+
</div>
|
32
|
-
|
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
|
+

|
2
日本の説明文を改めました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
django
|
1
|
+
djangoのtemplate内において、loopを使わずにブログタイトルを1つづつ表示させる。
|
body
CHANGED
File without changes
|
1
説明が不足していたため、日本語の表現を少し改めました。
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
|
-
|
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
|
+
初心者のため、拙い質問で誠に恐れ入りますが、ご教示頂ければ嬉しく思います。
|