質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

0回答

932閲覧

Djangoのテンプレート内で別のmodelに保存した値を参照したい

Murasaki_PurPle

総合スコア37

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/10/04 03:49

編集2020/10/15 14:16

Djangoのテンプレート内で別のmodelに保存した値を参照したい

Djangoでブログを作成しています。
テンプレート内で、リンクを貼るために DBに保管されているリンク先の画像やらテキストを使いたいと考えているのですが、うまく実装できずに困っております。

###詳細な説明
modelから値を取ってきて、テンプレートに反映させる基本的な部分は実装が完了しています。
基本的な部分で実装はおおよそ終わっています。
基本的な概念については理解しているつもりです。

画像の「お金って、幾らあれば満足なんだっけ」以下の部分は、TextFieldを使い、summernoteというアプリケーションで編集しています。
管理画面での編集の様子 summernoteを使っている

勿論、htmlを使ってより細かな編集が可能です。
summernoteのhtml編集画面
今、model内のTextFieldをhtmlで編集している状態です。

さて、本文で 自分の作成したページのリンクを貼る場合は以下のように「カード」を作って実装しようとしております。そのためには、modelに保管されている別のTextFieldやImageFieldを流用したいのですが、うまく反映されません。カードを使ってリンクを実装したいが、modelから値を取れない

TextField内のhtmlで

Django

1<a href="{% ××× %}">リンク</a>

などのようにやっても反映されないようです。

環境とソースコード

Django3.1.1
PosrgreSQL

urls.py

python

1from django.contrib import admin 2from django.urls import path, include 3from django.contrib.staticfiles.urls import static 4 5from . import settings 6 7urlpatterns = [ 8 path("", include("QuantumGun.urls")), 9] 10 11#開発サーバーでメディアを配信できるように設定 12urlpatterns += static( 13 settings.MEDIA_URL, 14 document_root=settings.MEDIA_ROOT 15) 16

QuantumGun.urls.py

python

1from django.urls import path 2from django.contrib import admin 3from .views import Entrance, About, Contact, BlogList, BlogDetail, BlogCreate, formfunc 4 5urlpatterns = [ 6 #管理画面 7 path('admin/', admin.site.urls), 8 9 #Entrance画面と直接つながってるページ 10 path("", Entrance.as_view(), name="Entrance"), 11 path("about/", About.as_view(), name="about"), 12 path("contact/", Contact.as_view(), name="contact"), 13 path("blog", BlogList.as_view(), name="blog"), 14 15 #更に1階層下へ 16 path("detail/<int:pk>/", BlogDetail, name='detail') 17]

QuantumGun.views.py

python

1from django.views.generic import TemplateView, ListView, DetailView, CreateView 2from django.shortcuts import render, redirect 3from .forms import DiaryCreateForm 4from django.urls import reverse_lazy 5from django.contrib import messages 6 7from .models import BlogModel4 8 9 10# Create your views here. 11def BlogDetail(request, pk): 12 object1 = BlogModel4.objects.get(pk=pk) 13 object2 = BlogModel4.objects.filter().values().order_by("-pageView") 14 15 object1.pageView+=1 16 object1.save() 17 18 contents = { 19 "object1": object1, 20 "object2": object2 21 } 22 23 return render( 24 request, 25 "BlogDetail.html", 26 contents 27 ) 28

QuantumGun.model.py

python

1from django.db import models 2 3# Create your models here. 4CATEGORY = ( 5 ("python", "python"), 6 ("Django", "Django"), 7 ("FIRE", "FIRE"), 8 ("html/css", "html/css"), 9 ("数学", "数学"), 10 ("物理", "物理"), 11 ("データサイエンス", "データサイエンス") 12) 13 14class BlogModel4(models.Model): 15 title = models.CharField(max_length=100) 16 contentDescription = models.TextField(max_length=150) 17 postdate = models.DateField(auto_now_add=True) 18 updateDate = models.DateField(auto_now=True) 19 category = models.CharField( 20 max_length=50, 21 choices=CATEGORY 22 ) 23 SmallCategory = models.CharField( 24 max_length=50, 25 choices=CATEGORY 26 ) 27 eyeCatch = models.ImageField( 28 verbose_name="アイキャッチ画像", 29 blank=True, 30 null=True 31 ) 32 pageView = models.PositiveIntegerField(default=0) 33 content = models.TextField() 34 35 def __str__(self): 36 return self.title

QuantumGun.Template.BlogDetail

{% extends "diaryBase.html" %} {% load static %} {% block headerPic %} {% static 'img/wave.jpg' %} {% endblock %} {% block title %} {{ object1.title }} {% endblock %} {% block titleContsnts %} <div class="title"> <h1>{{ object1.title }}</h1> <div class="genre"> <span>{{ object1.category }}</span> <span>{{ object1.SmallCategory }}</span> </div> <div class="info"> <div class="date"> <span>作成日 : {{ object1.postdate }} </span><br> <span>更新日 : {{ object1.updateDate }} </span><br> </div> <div class="pV"> {{ object1.pageView }}pV </div> </div> <div class="diffusion"> <div class="Tw"> <div class="TwDiff"> </div> </div> <div class="Fcb"> <div class="FcbDiff"> </div> </div> </div> </div> {% endblock %} {% block eyeCatchPic %} {% if p.eyeCatch %} <img src="{{ p.eyeCatch.url }}" class="eyeCatch"> {% endif %} {% endblock %} {% block contentsSection %} <!--blogListとblogDetail,about, contactはcontentsSectionの中身が違ってくるので区別します--> <div class="detail"> {{ object1.content | safe }} </div> {% endblock %} {% block reverse %} {% url 'blog' %} {% endblock %} {% block famousArticle %} {% for item in object2 %} <a href="/detail/{{ item.id }}" style="text-decoration: none;"> <div class="famousListCard"> <div class="famousListImg"> <img src="/media/{{ item.eyeCatch }}" class="imageFamousList"> </div> <div class="famousListSentence"> <div class="famousListTitle"> <p class="titleFamousList" style="color:#444;">{{ item.title }}</p> </div> <div class="famousListPV"> <p>{{ item.pageView }}pV</p> </div> </div> </div> </a> {% endfor %} {% endblock %}

TextFieldのカード部分のみ抜粋

html

1<div class="linkCard"> 2 <div class="linkCardPic"> 3 <img src="{% static 'img/fullMoon.jpg' %}" class="linkImage"> 4 </div> 5 <div class="linkSentence"> 6 <div class="linkTitleSec"> 7 <p> 8 <a href="{% url 'about' %}" style="text-decoration: none; color:black;"> 9 About 10 </a> 11 </p> 12 </div> 13 <div class="linkDescriptionSec"> 14 <p>当webサイト QuantumGunと、管理人の叢咲(むらさき)について。</p> 15 </div> 16 </div> 17</div> 18 19<div class="linkCard"> 20 <div class="linkCardPic"> 21 <img src="{% static 'img/fullMoon.jpg' %}" class="linkImage"> 22 </div> 23 <div class="linkSentence"> 24 <div class="linkTitleSec"> 25 <p> 26 <a href="{% url 'detail' 1%}" style="text-decoration: none; color:black;"> 27 About 28 </a> 29 </p> 30 </div> 31 <div class="linkDescriptionSec"> 32 <p>当webサイト QuantumGunと、管理人の叢咲(むらさき)について。</p> 33 </div> 34 </div> 35</div>

いつもありがとうございます。

お忙しい中恐縮ですが、今回も皆様の知恵を貸していただけないでしょうか。
どうぞよろしくお願いいたします。

一応発見したスマートではないやり方

かなりセンスのない方法ですが、一応「リンクの数に合わせて、renderで返却する値をif文で条件分岐する」という方法を思いつきました。

Django

1def BlogDetail(request, pk): 2 object1 = BlogModel5.objects.get(pk=pk) 3 object2 = BlogModel5.objects.filter().values().order_by("-pageView") 4 if object1.link is not None: 5 object3 = BlogModel5.objects.get(pk=object1.link) 6 7 object1.pageView += 1 8 object1.save() 9 10 contents = { 11 "object1": object1, 12 "object2": object2, 13 "object3": object3 14 } 15 16 return render( 17 request, 18 "BlogDetail.html", 19 contents 20 ) 21 else: 22 object1.pageView += 1 23 object1.save() 24 25 print("object1.linkの中に何も入ってないよ!", object1.link) 26 27 contents = { 28 "object1": object1, 29 "object2": object2 30 } 31 32 return render( 33 request, 34 "BlogDetail.html", 35 contents 36 )

ひたすら分岐させまくるだけなのであまりかっこいい方法とは言えないなと思っております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問