<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Django | 文系出身のSEですが、何か</title>
	<atom:link href="https://loosecarrot.com/category/se%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2/django/feed/" rel="self" type="application/rss+xml" />
	<link>https://loosecarrot.com</link>
	<description>文系(国際系)出身でSE就職のサラリーマンが プログラミング・海外旅行・語学・健康などに関する情報を発信します</description>
	<lastBuildDate>Thu, 27 Jul 2023 07:33:41 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.8</generator>

<image>
	<url>https://loosecarrot.com/wp-content/uploads/2020/08/cropped-8214a4f1973e7caf419465b3dcc3ffd7-32x32.png</url>
	<title>Django | 文系出身のSEですが、何か</title>
	<link>https://loosecarrot.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">151273272</site>	<item>
		<title>Djangoでユーザ管理アプリ デモ動画とソースコード公開</title>
		<link>https://loosecarrot.com/2023/07/03/6467/</link>
					<comments>https://loosecarrot.com/2023/07/03/6467/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Mon, 03 Jul 2023 05:41:38 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=6467</guid>

					<description><![CDATA[<p>Djangoのユーザ管理アプリ作成の目次ページはこちらです。  Djangoでユーザ管理アプリの作ったので、ソースコードを公開します。 良ければ勉強の参考にしてみて下さい。 デモ動画です。</p>
The post <a href="https://loosecarrot.com/2023/07/03/6467/">Djangoでユーザ管理アプリ デモ動画とソースコード公開</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-6479" src="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ_機能説明-1.jpeg" alt="" width="800" height="400" />
<p>Djangoのユーザ管理アプリ作成の<a href="https://loosecarrot.com/2021/01/09/4856/">目次ページ</a>はこちらです。</p>
<p>&nbsp;</p>
<p>Djangoでユーザ管理アプリの作ったので、<a href="https://base-shop.loosecarrot.com/items/76641744" target="_blank" rel="noopener">ソースコード</a>を公開します。</p>
<p>良ければ勉強の参考にしてみて下さい。</p>
<p>デモ動画です。</p>
<p><div class="video"><iframe title="Django ユーザ管理アプリ紹介" width="500" height="281" src="https://www.youtube.com/embed/9x6p8H_Ej3M?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>ユーザ管理アプリの機能</h2>
<p>以下の3つです。</p>
<ul>
<li>ユーザを表示する</li>
<li>ユーザを更新する</li>
<li>ユーザを追加する</li>
</ul>
<h2>ソースコードの使い方</h2>
<p>以下の手順でブラウザで使用可能です。</p>
<div class="concept-box2">
<p>Python、Django、仮想環境などは、事前にインストール済の前提です。</p>
<p>動作環境は事前に行ってください。</p>
</div>
<h3><strong>①ソースコード準備</strong></h3>
<p>BASE購入後にメールが送信されます。</p>
<p>メールに記載のURLからソースコードをダウンロードしておいてください。</p>
<p>その後、ZIPファイルを解凍した状態にしておいてください。</p>
<h3><strong>②「myproject」のプロジェクト作成</strong></h3>
<p>C:\直下に「django」フォルダを作成しておいてください。</p>
<p>その後、以下をコマンドから実行してください。</p><pre class="urvanov-syntax-highlighter-plain-tag">cd C:\django
python -m django startproject myproject</pre><p>これで「C:\django\myproject」のフォルダができるはずです。</p>
<h3>③ソースコードの入れ替え</h3>
<img decoding="async" class="alignnone size-full wp-image-6468" src="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoの上書き.jpeg" alt="" width="1824" height="616" srcset="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoの上書き.jpeg 1824w, https://loosecarrot.com/wp-content/uploads/2023/07/DJangoの上書き-300x101.jpeg 300w, https://loosecarrot.com/wp-content/uploads/2023/07/DJangoの上書き-1024x346.jpeg 1024w, https://loosecarrot.com/wp-content/uploads/2023/07/DJangoの上書き-768x259.jpeg 768w, https://loosecarrot.com/wp-content/uploads/2023/07/DJangoの上書き-1536x519.jpeg 1536w, https://loosecarrot.com/wp-content/uploads/2023/07/DJangoの上書き.jpeg 856w" sizes="(max-width: 1824px) 100vw, 1824px" />
<p>①C:\django\myprojectの中身をすべて削除してください。</p>
<p>②その後、画像のようにダウンロードしたmyprojectの中身をコピペしてください。</p>
<h3>bootstrap4のインストール</h3>
<p>bootstrap4を使っています。</p>
<p>以下でインストール可能です。</p><pre class="urvanov-syntax-highlighter-plain-tag">pip install django-bootstrap4</pre><p></p>
<h3>サーバを起動</h3>
<p>以下コマンドでサーバを起動します。</p><pre class="urvanov-syntax-highlighter-plain-tag">cd C:\django\myproject
python manage.py runserver</pre><p>その後、以下にアクセスするとアプリのページが表示されます。</p>
<p><a href="http://127.0.0.1:8000/users/" target="_blank" rel="noopener">http://127.0.0.1:8000/users/</a></p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6473" src="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ.jpeg" alt="" width="1064" height="848" srcset="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ.jpeg 1064w, https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ-300x239.jpeg 300w, https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ-1024x816.jpeg 1024w, https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ-768x612.jpeg 768w, https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ.jpeg 856w" sizes="(max-width: 1064px) 100vw, 1064px" />
<p><a href="https://base-shop.loosecarrot.com/items/76641744" target="_blank" rel="noopener">ソースコードをダウンロード</a></p>The post <a href="https://loosecarrot.com/2023/07/03/6467/">Djangoでユーザ管理アプリ デモ動画とソースコード公開</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2023/07/03/6467/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6467</post-id>	</item>
		<item>
		<title>Django独学でwebアプリのサイトを立ち上げてみた!</title>
		<link>https://loosecarrot.com/2021/03/07/5066/</link>
					<comments>https://loosecarrot.com/2021/03/07/5066/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 07 Mar 2021 06:16:25 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[プログラミング独学]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=5066</guid>

					<description><![CDATA[<p>2021年2月14日のバレンタインデーのことです。 一人家でPCに向かい続けながら、 文系出身のSEですが、開発してみた (loosecarrot.online)というサイトを立ち上げました。 Djangoは2020年の</p>
The post <a href="https://loosecarrot.com/2021/03/07/5066/">Django独学でwebアプリのサイトを立ち上げてみた!</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-5067" src="https://loosecarrot.com/wp-content/uploads/2021/03/Djangoでwebアプリのサイトを立ち上げてみた.jpg" alt="" width="800" height="400" />
<p>2021年2月14日のバレンタインデーのことです。</p>
<p>一人家でPCに向かい続けながら、</p>
<p><a href="https://loosecarrot.online/">文系出身のSEですが、開発してみた (loosecarrot.online)</a>というサイトを立ち上げました。</p>
<p>Djangoは2020年の年末に独学を初めて2か月たった状態でした。</p>
<p>意外とすぐにサイト立ち上げもできるのだなと感じました。</p>
<h2>webアプリサイトを立ち上げた理由</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-5071" src="https://loosecarrot.com/wp-content/uploads/2021/03/Djangoでwebアプリのサイトを立ち上げてみた_2.jpg" alt="" width="800" height="400" />
<h3>単純に興味が湧いて面白いから</h3>
<p>私は開発現場からは離れてしまっています。</p>
<p>でもプログラミングで何かを作ることはやっぱり楽しいです。</p>
<p>「<strong>サイトは自分で作ってことがないし、面白そうだからやってみよう</strong>」と思って作りました。</p>
<p>DjangoやPythonを2020年末の冬休みに習得しようと思えたのも、やっぱり<span style="color: #ff0000;">面白いからです。</span></p>
<p>ちなみにUdemyの<a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fdjango-3app%2F" rel="nofollow">Djangoの基礎をマスターして、3つのアプリを作ろう！</a>をで勉強しました。</p>
<h3>仕事を個人としても受けていく窓口にするため</h3>
<p>理由の大部分は<span style="color: #ff0000;">お金を稼ぎたいと夢を見ている</span>からです。</p>
<p><a href="https://px.a8.net/svt/ejp?a8mat=2ZW89X+2P1P5M+2OM2+TRVYQ" target="_blank" rel="nofollow noopener noreferrer">クラウドワークス</a>や<a href="https://www.lancers.jp/" target="_blank" rel="nofollow noopener noreferrer">ランサーズ</a>などのサイトで少しずつお仕事を受けています。</p>
<p>ですが、いまいち<span style="color: #ff0000;">自分のできることが相手に伝えられない</span>なと感じていました。</p>
<p>なので、<strong>自分はこんなものを作っているんですよ</strong>と分かりやすいサイトを作ろうと思いました。</p>
<p>また、現状は仕事を受けるワーカーたちは<span style="color: #ff0000;">安い単価</span>でしか仕事を受けられません。</p>
<p>理由はおそらく、仕事に応募する側が何人もいて、1人だけが選ばれるという仕組みの中で仕事をしているからです。</p>
<p>であれば、自分が応募するのではなく、相手から依頼をしてもらえる形の方が良いかなと思ってサイトを作りました。</p>
<p><span style="color: #0000ff;">実際どうなるか分かりませんがね&#8230;</span></p>
<h3>プログラミング独学のモチベーションのため</h3>
<p>プログラミングの独学はとてもモチベーション維持が難しいです。</p>
<p>一つの手段として、サイト作成で独学のモチベーションを継続しようとしました。</p>
<a href="https://loosecarrot.com/2020/11/18/4422/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/11/プログラミングの独学が難しい理由と解決方法_6-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学が難しい理由</span><span class="blog-card-excerpt">

プログラミングの独学をしていても、難しくて行き詰ってしまうことってよくあると思います。

私も中小のIT関係会社に勤めていま...</span></div></div></a>
<p>サイトを通してお金を稼ぐということはモチベーションの一つでもあります。</p>
<p>なので、<strong>技術を身に着けたい</strong>という思いと、<strong>お金を稼ぎたい</strong>という思いのどちらが先かは分かりません。</p>
<p>でも、サイトを作ると問合せや相談が多少なりともあります。</p>
<p>それが、独学やサイトを継続していくためのモチベーションにはなっています。</p>
<h2>サイトの内容</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-5074" src="https://loosecarrot.com/wp-content/uploads/2021/03/Djangoでwebアプリのサイトを立ち上げてみた_5.png" alt="" width="800" height="400" />
<p><span style="color: #ff0000;">ネットショップ運営やせどりに役立つツール作成</span>をしていこうと思っています。</p>
<p>最近はコロナや副業解禁の流れに乗って<span style="color: #ff0000;">ネット通販需要が増えて</span>おり、それに伴ってITがらみの仕事も増えつつあるためです。</p>
<p>簡易なツール作成を通して、技術の向上を目指していきます。</p>
<p>また、依頼があれば開発も個人で受けていこうとしています。</p>
<p>なかなか無茶を言うお客さんも多いので、うまくいかないことも多いと思いますが&#8230;</p>
<a href="https://loosecarrot.com/2021/03/01/5052/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2021/03/発注側・受注側両方ともプロであれ-個人スキル売り買いの今後_1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">発注側・受注側両方ともプロであれ! 今後、個人スキル売買に必要なこと</span><span class="blog-card-excerpt">

某個人スキルの売り買いサイトで相談を受けました。

タイムチケットやココナラのようなサイトの話です。

3日ほどやり取り...</span></div></div></a>
<p>RPAの活用も考えており、技術的なことやサンプルで作ったものを発信していきます。</p>
<p>参考にですが、食いつきが良かったものはBASEの自動登録でした。</p>
<h2>構築した環境</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-5073" src="https://loosecarrot.com/wp-content/uploads/2021/03/Djangoでwebアプリのサイトを立ち上げてみた_4.png" alt="" width="800" height="400" />
<p>・サーバ：<a href="https://px.a8.net/svt/ejp?a8mat=3BT2HV+ALMWBE+D8Y+BWVTE" rel="nofollow">さくらのVPS</a></p>
<p>・OS:LinuxのCenOS7</p>
<p>・フレームワーク：Django 3.1</p>
<p>・言語：Python 3.9</p>
<p>HTMLテンプレート：<a href="http://template-party.com/">テンプレートパーティ</a>のHTMLテンプレ</p>
<p>ちなみに私が使ったのは<a href="https://template-party.com/db_template/?act=list&amp;kind=1&amp;info2=tp_biz44">ビジネスサイト向け無料ホームページテンプレートtp_biz44【2017/04/27公開】</a>です。</p>
<h2>構築のコスト</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-5072" src="https://loosecarrot.com/wp-content/uploads/2021/03/Djangoでwebアプリのサイトを立ち上げてみた_3.jpg" alt="" width="800" height="400" />
<h3>時間面</h3>
<p><span style="color: #ff0000;">60時間</span>くらいはかけたと思います。</p>
<p>日数にして10日くらいの間かかったはずです。</p>
<p>平日は20時～24時まで、休日は11時くらいから23時くらいまでほぼひたすらPCに向かっていました(笑)</p>
<p>1週間くらいで<span style="color: #ff0000;">自分だけでは無理と判断</span>しました。</p>
<p>LinuxやDjangoの知識がないためです&#8230;</p>
<h3>金銭面</h3>
<p>初期構築としては<span style="color: #ff0000;">1万円</span>です。</p>
<p>一人ではできなかったのでクラウドワークスで<a href="https://crowdworks.jp/public/employees/4129711">clspecialist</a>さんという方にお手伝いいただきました。</p>
<p>そのうち<strong>構築手順</strong>も紹介していこうかと思います。</p>
<p>ちなみに運営費はサーバ台の月600円程度もあります。</p>
<h2>これからサイトを成長させていく</h2>
<p>今はサイトを立ち上げたばかりなので、サイト経由の収入も仕事依頼もありません。</p>
<p>まずはツールやコンテンツを増やそうと思います。</p>
<p>SEO対策なども行い自分のサイトを検索上位に乗せて、お仕事がもらえるような構想を練っていこうと考えています。</p>The post <a href="https://loosecarrot.com/2021/03/07/5066/">Django独学でwebアプリのサイトを立ち上げてみた!</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2021/03/07/5066/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5066</post-id>	</item>
		<item>
		<title>Django PythonのModuleNotFoundErrorでハマった話</title>
		<link>https://loosecarrot.com/2021/02/07/5033/</link>
					<comments>https://loosecarrot.com/2021/02/07/5033/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 07 Feb 2021 10:12:49 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=5033</guid>

					<description><![CDATA[<p>Djangoのプロジェクト名やアプリ名には気を付けた方が良いという話です。 備忘録として残しておきます。 インポートするモジュールと作成するアプリ、プロジェクト名は一致させないように注意という話です。 起こったこと：モジ</p>
The post <a href="https://loosecarrot.com/2021/02/07/5033/">Django PythonのModuleNotFoundErrorでハマった話</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>Djangoのプロジェクト名やアプリ名には気を付けた方が良いという話です。</p>
<p>備忘録として残しておきます。</p>
<p><strong>インポートするモジュールと作成するアプリ、プロジェクト名は一致させないように注意という話です。</strong></p>
<h2>起こったこと：モジュールはあるが、ModuleNotFoundErrorが出る</h2>
<p>pipコマンドでamazon-paapi5をインストールしました。</p>
<p>モジュールを参照しようとすると以下でModuleNotFoundErrorが出る&#8230;</p>
<p>from amazon.paapi import AmazonAPI</p><pre class="urvanov-syntax-highlighter-plain-tag">from amazon.paapi import AmazonAPI</pre><p>以下コマンドを使ってインストール先を確認してみても、ちゃんとインストールされている。</p><pre class="urvanov-syntax-highlighter-plain-tag">pip show amazon-paapi5</pre><p>実行結果</p>
<p>Name: amazon-paapi5<br />
Version: 1.1.2<br />
Summary: Amazon Product Advertising API 5.0 wrapper for Python<br />
Home-page: https://github.com/alefiori82/amazon-paapi5<br />
Author: Alessandro Fiori<br />
Author-email: alessandro.fiori@gmail.com<br />
License: GPL-3.0<br />
Location: c:\pg\python39\lib\site-packages<br />
Requires: amightygirl.paapi5-python-sdk</p>
<p>フォルダもちゃんと存在していることを確認しました。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-5034" src="https://loosecarrot.com/wp-content/uploads/2021/02/Django-PythonのModuleNotFoundErrorでハマった話.jpg" alt="" width="863" height="352" srcset="https://loosecarrot.com/wp-content/uploads/2021/02/Django-PythonのModuleNotFoundErrorでハマった話.jpg 863w, https://loosecarrot.com/wp-content/uploads/2021/02/Django-PythonのModuleNotFoundErrorでハマった話-300x122.jpg 300w, https://loosecarrot.com/wp-content/uploads/2021/02/Django-PythonのModuleNotFoundErrorでハマった話-768x313.jpg 768w, https://loosecarrot.com/wp-content/uploads/2021/02/Django-PythonのModuleNotFoundErrorでハマった話.jpg 856w" sizes="(max-width: 863px) 100vw, 863px" />
<h2>原因：アプリ名のフォルダ</h2>
<p>結論、アプリ名が参照モジュールと同じamazonフォルダだったことでした。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-5035" src="https://loosecarrot.com/wp-content/uploads/2021/02/Django-PythonのModuleNotFoundErrorでハマった話_2.jpg" alt="" width="874" height="353" srcset="https://loosecarrot.com/wp-content/uploads/2021/02/Django-PythonのModuleNotFoundErrorでハマった話_2.jpg 874w, https://loosecarrot.com/wp-content/uploads/2021/02/Django-PythonのModuleNotFoundErrorでハマった話_2-300x121.jpg 300w, https://loosecarrot.com/wp-content/uploads/2021/02/Django-PythonのModuleNotFoundErrorでハマった話_2-768x310.jpg 768w, https://loosecarrot.com/wp-content/uploads/2021/02/Django-PythonのModuleNotFoundErrorでハマった話_2.jpg 856w" sizes="(max-width: 874px) 100vw, 874px" />
<p>from amazon.paapiの意味としては</p>
<p><strong>amazonフォルダ内のpaapi.pyを参照する</strong>です。</p>
<p>恐らく、「プロジェクトのamazonフォルダを見に行ったけど、paapi.pyなんてありません」ということでエラーになっていたようです。</p>
<h2>対応はプロジェクト名を変更して作り直し</h2>
<p>対応としては、プロジェクト名をamazon→AmazonAppという<span style="color: #ff0000;">別名</span>にして作り直しました。</p>
<p>これでエラーが出なくなりました。</p>
<p>プロジェクト名やファイル名には気を付けましょう。</p>The post <a href="https://loosecarrot.com/2021/02/07/5033/">Django PythonのModuleNotFoundErrorでハマった話</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2021/02/07/5033/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5033</post-id>	</item>
		<item>
		<title>Django独学 フォームを使ってDBを更新する</title>
		<link>https://loosecarrot.com/2021/01/17/4937/</link>
					<comments>https://loosecarrot.com/2021/01/17/4937/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 17 Jan 2021 06:47:17 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4937</guid>

					<description><![CDATA[<p>Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリ デモ動画とソースコード公開 Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリの作っ</p>
The post <a href="https://loosecarrot.com/2021/01/17/4937/">Django独学 フォームを使ってDBを更新する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4949" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBを更新する_7.png" alt="" width="800" height="400" />
<p>Djangoのユーザ管理アプリ作成の<a href="https://loosecarrot.com/2021/01/09/4856/">目次ページ</a>はこちらです。</p>
<a href="https://loosecarrot.com/2023/07/03/6467/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ_機能説明-1-320x180.jpeg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Djangoでユーザ管理アプリ デモ動画とソースコード公開</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。



Djangoでユーザ管理アプリの作ったので、ソースコ...</span></div></div></a>
<p>&nbsp;</p>
<p>今回は、フォーム機能を使ってDBへ新規登録をさせます。</p>
<p>Udemyの<a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fdjango-3app%2F" rel="nofollow">Djangoの基礎をマスターして、3つのアプリを作ろう！</a>を参考に勉強していています。</p>
<p>また、フォームを扱っていくのでHTMLの基本的な知識がある方でないとも難しいかもしれません。</p>
<div class="concept-box5">
<p><a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fhtml-css-js%2F" rel="nofollow">ちゃんと学ぶ、HTML/CSS + JavaScript</a></p>
</div>
<h2>更新処理の流れ</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4938" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBを更新する_1.png" alt="" width="800" height="400" />
<p>登録の時と同じで、以下の流れです。</p>
<div class="simple-box2">
<p>①入力フォームをリクエストから呼び出す</p>
<p>②入力フォームをブラウザに表させる</p>
<p>③フォームに入力したデータをサーバに渡して更新</p>
<p>④更新した結果をブラウザに表示</p>
</div>
<p>この順番で処理を作成していきます。</p>
<a href="https://loosecarrot.com/2021/01/11/4909/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_9-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Django独学 フォームを使ってDBに新規登録をする</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。

https://loosecarrot.com/2023/0...</span></div></div></a>
<h2>①入力フォームをリクエストから呼び出す(urls.py)</h2>
<p>まず最初に「～users/edit/id」と言うURLをユーザー更新のURLにします。</p>
<p>そのために、URLへアクセスされたときの動作をアプリのurls.pyに記入します。</p><pre class="urvanov-syntax-highlighter-plain-tag">from django.urls import path
from . import views
#import views

urlpatterns = [
    path('', views.showUsers, name='showUsers'),

    #ユーザの詳細情報を表示する処理を呼び出す
    path('&lt;int:id&gt;', views.showDetail, name='showDetail'),
    #ユーザの登録フォームを呼び出す
    path('create', views.showCreateUserForm, name='showCreateUserForm'),
    #ユーザ登録する処理を呼び出す
    path('add', views.addUser, name='addUser'),
    #ユーザ編集するフォームを呼び出す
    path('&lt;int:id&gt;/edit', views.showEditUserForm, name='showEditUserForm'),
]</pre><p>15行目に追記をしました。</p>
<p><span style="color: #ff0000;">※この次にviews.pyの説明を記載します。</span></p>
<p>一旦viewsのことは置いておいて、やっていることだけ理解してみて下さい。</p>
<p>path(&#8216;&lt;int:id&gt;/edit&#8217;, views.showEditUserForm, name=&#8217;showEditUserForm&#8217;),の解説です。</p>
<p><strong>&#8216;&lt;int:id&gt;/edit&#8217;</strong>：URLがusers/id/edit/場合の指定した処理を呼ぶという意味</p>
<p><strong>views.showEditUserForm</strong>：views.pyのshowEditUserFormの処理を呼ぶという意味です。</p>
<p><strong>name=&#8217;showEditUserForm&#8217;</strong>：リンク先に指定するときの名前で後で使います。</p>
<h2>②編集フォームをブラウザに表させる</h2>
<p>新規登録フォームは入力欄は空白でしたが、</p>
<p>編集フォームではユーザの情報をフォームに表示させます。</p>
<p>そのため、</p>
<p>以下の流れになります。</p>
<div class="simple-box2">
<p>①更新対象のユーザ情報を取得</p>
<p>②htmlへフォームを渡す</p>
<p>③ブラウザにフォームを表示させる</p>
<p>※フォームは前回新規登録の時に作成したものを使います。</p>
</div>
<h3>ブラウザに編集フォームを表示させる(views.py)</h3>
<p>①～③はすべてviews.pyで作ります。</p>
<p>以下を追記しています。</p><pre class="urvanov-syntax-highlighter-plain-tag"># 編集フォームをHTMLへ返す
def showEditUserForm(request,id):

    #idをもとにユーザ情報を取得
    userinfo = get_object_or_404(UserInfo,pk=id)
    #フォームをオブジェクトを作成
    userForm = UserForm(instance=userinfo)
    
    #ユーザ情報をフォームに格納
    context = {
        'userinfo':userinfo,
        'userForm':userForm,
    }

    #user.htmlへデータを渡す
    return render(request, 'myapp/edit.html',context)</pre><p>5行目で更新対象のユーザ情報を取得しています。</p>
<p>7行目ではフォームをインスタンス化して、</p>
<p>16行目でHTML側に情報を渡しています。</p>
<p>ユーザ情報は更新した後に、対象のユーザページを表示するために渡しています。</p>
<h3>フォームを表示するHTML作成(edit.html)</h3>
<p>edit.htmlはまだ作っていないので、以下に作成します。</p>
<p>C:\django\myproject\myapp\templates\myapp</p>
<p>htmlの中身は以下です。</p><pre class="urvanov-syntax-highlighter-plain-tag">{% extends './base.html' %}
{% load bootstrap4 %}

{% block app %}
    &lt;h1&gt;ユーザ編集&lt;/h1&gt;

    &lt;form action='{% url "showUsers" %}' method='post' class='form'&gt;
        &lt;!-- ユーザー編集フォームを表示 --&gt;
        {% csrf_token %}
        {% bootstrap_form userForm %}
        &lt;button type='submit' class='btn btn-outline-primary'&gt;更新&lt;/button&gt;
        &lt;a href='{% url "showUsers" %}' class='btn btn-outline-secondary'&gt;戻る&lt;/a&gt;
    &lt;/form&gt;
{% endblock %}</pre><p>ほとんどcreate.htmlのコピペです。</p>
<p>ボタンクリック時のactionで呼び出す関数を変えるだけです。</p>
<p><span style="color: #ff0000;">※ユーザを更新する処理はこの次に書きます。</span></p>
<p><span style="color: #ff0000;">今はエラー回避のためにユーザ一覧へ遷移するようにしています。</span></p>
<p>表示させてみるとこんな形で、idをもとにユーザ情報を表示できています。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4939" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBを更新する_2.png" alt="" width="800" height="627" />
<h2><span id="i-4">③フォームに入力したデータを登録後、結果表示</span></h2>
<p>現状は更新ボタンクリック時にユーザ一覧を表示していますが、ユーザ一情報を更新する処理を呼ぶようにします。</p>
<p>まずは更新ボタンをクリックした後、DBに登録する処理を作っていきます。</p>
<h3>更新処理を呼び出す(urls.py)</h3>
<p>まずはurls.pyにユーザを更新する処理を呼ぶように記載します。</p><pre class="urvanov-syntax-highlighter-plain-tag">#ユーザ更新する処理を呼び出す
path('&lt;int:id&gt;/update', views.updateUser, name='updateUser'),</pre><p><span style="font-size: 1em; letter-spacing: 0.05em;">この処理をアプリのurls.pyに追記します。</span></p>
<p>編集フォームの時と同じで、</p>
<p>&lt;int:id&gt;/updateのURLであれば、viewsのupdateUserを呼び出すという意味です。</p>
<p>updateUserの処理は次で作成します。</p>
<h3><span id="DBviewspy">ユーザ情報DBに更新する処理を作成(views.py)</span></h3>
<p>処理の流れとしては、以下になります。</p>
<div class="simple-box2">
<p>①フォームデータをDBに更新</p>
<p>②ユーザ詳細ページを表示</p>
</div>
<p>以下の処理を追加して①②両方ともviews.pyに記載しています。</p><pre class="urvanov-syntax-highlighter-plain-tag">#～～～～～～～～～～～～～～～～～
# フォームから受取ったデータをDBに更新する
def updateUser(request,id):
    #リクエストがPOSTの場合
    if request.method == 'POST':
        #idからユーザデータを取得
        userInfo = get_object_or_404(UserInfo,pk=id)
        #ユーザ情報と、リクエストをもとにフォームをインスタンス化
        userForm = UserForm(request.POST,instance=userInfo)
        if userForm.is_valid():
            userForm.save()

    #更新後、対象ユーザの情報を表示
    userInfo = get_object_or_404(UserInfo,pk=id)
    context = {
        'userinfoDetail': userInfo,
    }

    #detail.htmlへデータを渡す
    return render(request, 'myapp/detail.html',context)</pre><p>9行目について</p>
<p>userFormに変数にPOSTで受取った情報と、対象ユーザーの情報を入れています。</p>
<p>11行目のuserForm.save()</p>
<p>登録の時と同じsave()を使っています。</p>
<p>なぜ全く同じメソッドを呼んで、登録と更新が勝手に分かれるのか調べてみたところ、djangoの仕様で以下になっているそうです。</p>
<blockquote><p>既にプライマリキーがあるデータの条件を指定した場合は、INSERTでなく<br />
UPDATE SQL 文が実行されます。</p>
<p><a href="https://opendata-web.site/blog/entry/22/" target="_blank" rel="noopener">Django SQL データベース INSERT UPDATE 追加更新方法 save() create() add() update()</a></p></blockquote>
<p>userFormの引数になっているuserInfoはPKが入っているので、<span style="color: #ff0000;">自動的に更新</span>になります。</p>
<p>デバッグ実行で止めて、userForm → instanceとたどっていくと、確かにプライマリキー(pk)がありました。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4943" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBを更新する_3.jpg" alt="" width="800" height="530" />
<div>
<p>14行目～20行目で、更新した後のユーザ情報を取得して、詳細ページに表示させています。</p>
<h3><span id="addUsercreatehtml">更新ボタンクリック後にupdateUserを呼ぶ(edit.html)</span></h3>
<p>これでユーザ更新する処理が作成できました。</p>
<p>最後に、edit.htmlの更新ボタンクリックした後の処理を書き換えます。</p><pre class="urvanov-syntax-highlighter-plain-tag">{% extends './base.html' %}
{% load bootstrap4 %}

{% block app %}
    &lt;h1&gt;ユーザ編集&lt;/h1&gt;

    &lt;form action='{% url "updateUser" userinfo.id %}' method='post' class='form'&gt;
        &lt;!-- ユーザー編集フォームを表示 --&gt;
        {% csrf_token %}
        {% bootstrap_form userForm %}
        &lt;button type='submit' class='btn btn-outline-primary'&gt;更新&lt;/button&gt;
        &lt;a href='{% url "showUsers" %}' class='btn btn-outline-secondary'&gt;戻る&lt;/a&gt;
    &lt;/form&gt;
{% endblock %}</pre><p>7行目の{% url &#8220;showUsers&#8221; %}を</p>
<p>{% url &#8220;updateUser&#8221; userinfo.id %}に書き換えました。</p>
<p>これで、ユーザー詳細ページに遷移できます。</p>
<p>編集フォームを呼び出すshowEditUserFormで、userinfoをHTMLへ渡していたのは、</p>
<p>ユーザ情報のidを遷移先のURLにするためです。</p>
<p><a href="http://localhost:8000/users/1/edit" target="_blank" rel="noopener">localhost:8000/users/1/edit</a>にアクセスして、</p>
<p>事項紹介のサッカーを野球にして更新ボタンを押してみると。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4945" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBを更新する_4.png" alt="" width="800" height="568" />
<p>更新されて、「サッカー」が「野球」に変わりました！</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4946" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBを更新する_5.png" alt="" width="800" height="464" />
<h2><span id="usershtml">ユーザ編集ボタンをユーザ一覧に作成(users.html)</span></h2>
<p>最後に、このままだとユーザ編集画面に行くことができません。</p>
<p>なのでユーザ一覧画面に、編集ボタンを作っておきます。</p>
</div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">{% extends './base.html' %}
{% block app %}

    &lt;h1&gt;ようこそ！&lt;/h1&gt;
    &lt;!-- テーブル --&gt;
    &lt;table class="table table-striped table table-bordered "&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;th colspan="3"&gt;{{msg}}:{{count}}名&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody align="center"&gt;
            &lt;!-- count件(行)数分をループ --&gt;
            {% for user in userinfo %}
            &lt;tr&gt;
                &lt;!-- 4列分ユーザ情報を出力 --&gt;
                &lt;td&gt;{{user.userName}}&lt;/td&gt;
                &lt;td&gt;&lt;a href="{% url 'showDetail' user.id %}" class="btn btn-outline-primary"&gt;詳細&lt;/a&gt; &lt;/td&gt;
                &lt;!-- 編集ボタン --&gt;
                &lt;td&gt;&lt;a href="{% url 'showEditUserForm' user.id %}" class="btn btn-outline-primary"&gt;編集&lt;/a&gt; &lt;/td&gt;
            &lt;/tr&gt;
            {% endfor %}
        &lt;/tbody&gt;
    &lt;/table&gt;
    &lt;a href="{% url 'showCreateUserForm' %}" class='btn btn-outline-primary'&gt;ユーザ追加&lt;/a&gt;
    
{% endblock %}</pre><p>20行目でユーザ編集ボタンを追加しました。</p>
<p>引数にはユーザ情報のidをセットしています。</p>
<p>これで編集ボタンが追加できました。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4947" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBを更新する_6.png" alt="" width="800" height="513" />
<h2>(おまけ)ModelFormに複数行入力のテキストエリアを表示(forms.py)</h2>
<p>よく見てみると、自己紹介は500文字まで入力可能なのに、改行をすることができませんでした&#8230;</p>
<p>テキストボックスではなく、テキストエリアに変えてあげればOKです。</p>
<p>forms.pyを以下のように修正しました。</p><pre class="urvanov-syntax-highlighter-plain-tag">from django import forms
from . models import UserInfo

class UserForm(forms.ModelForm):
    class Meta:
        model = UserInfo
        fields = ('userName', 'country','sex','address','selfIntroduction')
        labels={
           'userName':'名前',
           'country':'出身国',
           'address':'住所',
           'sex':'性別',
           'selfIntroduction':'自己紹介',
           }
	    
        #自己紹介をテキストエリアにする
        widgets = {
            'selfIntroduction': forms.Textarea(attrs={'rows':4, 'cols':30}),
        }</pre><p>17行目の記述方法でテキストエリアに変えることができます。</p>
<div class="concept-box5">
<p><a href="https://yuki.world/django-textfield-height-width-modify/#2_formsForm" target="_blank" rel="noopener">【Django】TextFieldフォームのデフォルト幅や高さを変える</a></p>
</div>
<p>&nbsp;</p>
<p>今回はここまでです！</p>
<a href="https://t.felmat.net/fmcl?ak=Y4657Q.1.B846161.O69525F" target="_blank" rel="nofollow noopener"><img loading="lazy" decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y4657Q.B846161.O69525F" alt="" width="600" height="80" border="0" /></a>The post <a href="https://loosecarrot.com/2021/01/17/4937/">Django独学 フォームを使ってDBを更新する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2021/01/17/4937/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4937</post-id>	</item>
		<item>
		<title>Django独学 フォームを使ってDBに新規登録をする</title>
		<link>https://loosecarrot.com/2021/01/11/4909/</link>
					<comments>https://loosecarrot.com/2021/01/11/4909/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Mon, 11 Jan 2021 06:37:10 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4909</guid>

					<description><![CDATA[<p>Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリ デモ動画とソースコード公開 Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリの作っ</p>
The post <a href="https://loosecarrot.com/2021/01/11/4909/">Django独学 フォームを使ってDBに新規登録をする</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4929" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_9.png" alt="" width="800" height="400" />
<p>Djangoのユーザ管理アプリ作成の<a href="https://loosecarrot.com/2021/01/09/4856/">目次ページ</a>はこちらです。</p>
<a href="https://loosecarrot.com/2023/07/03/6467/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ_機能説明-1-320x180.jpeg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Djangoでユーザ管理アプリ デモ動画とソースコード公開</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。



Djangoでユーザ管理アプリの作ったので、ソースコ...</span></div></div></a>
<p>&nbsp;</p>
<p>今回は、フォーム機能を使ってDBへ新規登録をさせます。</p>
<p>Udemyの<a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fdjango-3app%2F" rel="nofollow">Djangoの基礎をマスターして、3つのアプリを作ろう！</a>を参考に勉強していています。</p>
<p>また、フォームを扱っていくのでHTMLの基本的な知識がある方でないとも難しいかもしれません。</p>
<div class="concept-box5">
<p><a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fclick.linksynergy.com%2Fdeeplink%3Fid%3D9v%2A%2FTGPvI90%26mid%3D47984%26murl%3Dhttps%253A%252F%252Fwww.udemy.com%252Fcourse%252Fhtml-css-js%252F" target="new" rel="noopener">ちゃんと学ぶ、HTML/CSS + JavaScript</a></p>
</div>
<h2>フォームとは</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4910" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_1.png" alt="" width="800" height="400" />
<p>Djangoにはフォームクラスが存在します。</p>
<p>フォームクラスを定義して、入力フォームをHTMLのテンプレートへ渡すことができます。</p>
<p>そうすることで、入力フォームがHTML上で表示できます。</p>
<p>また、フォームで入力された内容を元にDBへ登録させることもできます。</p>
<h2>フォームを使った処理の流れ</h2>
<p>まず、フォームを使った表示、データ更新の流れを整理しておきます。</p>
<p>これから作っていく内容を流れとして理解しておきましょう。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4911" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_2.png" alt="" width="800" height="400" />
<div class="simple-box2">
<p>①入力フォームをリクエストから呼び出す</p>
<p>②入力フォームをブラウザに表させる</p>
<p>③フォームに入力したデータをサーバに渡して登録</p>
<p>④登録した結果をブラウザに表示</p>
</div>
<p>この順番で処理を作成していきます。</p>
<h2>①入力フォームをリクエストから呼び出す(urls.py)</h2>
<p>まず最初に「～users/create」と言うURLを新規ユーザー登録のURLにします。</p>
<p>そのために、URLへアクセスされたときの動作をアプリのurls.pyに記入します。</p><pre class="urvanov-syntax-highlighter-plain-tag">from django.urls import path
from . import views

urlpatterns = [
    path('', views.showUsers, name='showUsers'),

    #ユーザの詳細情報を表示する処理を呼び出す
    path('&lt;int:id&gt;', views.showDetail, name='showDetail'),

    #ユーザの登録フォームを呼び出す
    path('create', views.showCreateUserForm, name='showCreateUserForm'),
]</pre><p>11行目に追記をしました。</p>
<div id="crayon-5ffb17aaeacfe508237067" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-main"></div>
</div>
<p><span style="color: #ff0000;">※この次にviews.pyの説明を記載します。</span></p>
<p>一旦viewsのことは置いておいて、やっていることだけ理解してみて下さい。</p>
<p>path(&#8216;create&#8217;, views.showCreateUserForm, name=&#8217;showCreateUserForm&#8217;),の解説です。</p>
<p><strong>&#8216;create&#8217;</strong>：URLがusers/create場合の指定した処理を呼ぶという意味</p>
<p><strong>views.showCreateUserForm</strong>：指定した処理が何かというと、views.pyのcreateUserです。</p>
<p><strong>name=&#8217;showCreateUserForm&#8217;</strong>：リンク先に指定するときの名前で後で使います。</p>
<h2>②入力フォームをブラウザに表させる</h2>
<p>ここをもう少しかみ砕くと、以下の流れになります。</p>
<div class="simple-box2">
<p>①htmlへフォームを渡す</p>
<p>②ブラウザにフォームを表示させる</p>
<p>ただし、フォームを定義していないので、先に作成するします。</p>
</div>
<h3>modelからフォーム作成(forms.py)</h3>
<p>「C:\django\myproject\myapp」の下にforms.pyを作成します。</p>
<p>そして、以下のように記載します。</p><pre class="urvanov-syntax-highlighter-plain-tag">from django import forms
from . models import UserInfo

class UserForm(forms.ModelForm):
    class Meta:
        model = UserInfo
        fields = ('userName', 'country','sex','address','selfIntroduction')
        labels={
           'userName':'名前',
           'country':'出身国',
           'address':'住所',
           'sex':'性別',
           'selfIntroduction':'自己紹介',
           }</pre><p>やっていることは、model(DBの定義情報)を使って、フォームを定義しています。</p>
<p>ModelFormを継承したクラスの場合、データベースアクセスに関連する情報を入れることができます。</p>
<p>こういう書き方ができるのねと理解しておいてください。</p>
<p>5行目：class Meta:以降にフォームの情報を定義する</p>
<p>6行目：modelはUserInfoクラスを使うようにしています</p>
<p>7行目：フォームで使う列は5つということです。</p>
<p>8行目：ラベル属性を各列に対して指定しています。</p>
<p>ラベルを指定しないと、HTMLに表示したときに、英語の列名がそのまま表示されます。</p>
<p>こうすることで、入力欄のラベルが日本語になります。</p>
<div class="concept-box5">
<p><a href="https://qiita.com/shundayo/items/87b425535dcda374d8fe" target="_blank" rel="noopener">【Django】FormクラスとModelFormクラス</a></p>
<p><a href="https://note.com/mihami383/n/n91ab6f3b5f74" target="_blank" rel="noopener">forms.Modelformでのラベルの設定の仕方</a></p>
</div>
<h3>ブラウザにフォームを表示させる(views.py)</h3>
<p>views.py側で呼び出されるcreateUserメソッドを作成していきます。</p>
<p>内容は以下です。</p><pre class="urvanov-syntax-highlighter-plain-tag">from .forms import UserForm


#～～～～～～～～～～～～～～～～～
# 新規登録フォームHTMLへ返す
def showCreateUserForm(request):
    #フォームを変数にセット
    form = UserForm()

    context = {
        'userForm':form,
    }

    #detail.htmlへデータを渡す
    return render(request, 'myapp/create.html',context)</pre><p>UserFormをimportしています。</p>
<p>8行目でform変数にUserFormのインスタンスを格納しています。</p>
<p>10行目でcontext辞書に格納</p>
<p>15行目でcreate.htmlへcontextを渡しています。</p>
<h3>フォームを表示するHTML作成(create.html)</h3>
<p>create.htmlはまだ作っていないので、以下に作成します。</p>
<p>C:\django\myproject\myapp\templates\myapp</p>
<p>htmlの中身は以下です。</p><pre class="urvanov-syntax-highlighter-plain-tag">{% extends './base.html' %}

{% block app %}
    &lt;h1&gt;ユーザ登録&lt;/h1&gt;

    &lt;form action='{% url "showUsers" %}' method='post' class='form'&gt;
        &lt;!-- ユーザー登録フォームを表示 --&gt;
        {% csrf_token %}
        {{ userForm }}
        &lt;button type='submit' class='btn btn-outline-primary'&gt;登録&lt;/button&gt;
        &lt;a href='{% url "showUsers" %}' class='btn btn-outline-secondary'&gt;戻る&lt;/a&gt;
    &lt;/form&gt;
{% endblock %}</pre><p>9行目でフォームの中に格納したform情報を表示させています。</p>
<p>8行目の{% csrf_token %}はリクエストが正常なものかをチェックしてくれるもので、今のところはおまじない的な理解で良いと思います。</p>
<div class="concept-box5">
<p><a href="https://djangobrothers.com/blogs/django_csrf/" target="_blank" rel="noopener">csrf_tokenの仕組みとCSRF無効化・画面カスタマイズする方法</a></p>
</div>
<p>6行目で登録ボタンクリックを受取るとshowUsers呼び出して、ユーザ一覧へ遷移する</p>
<p><span style="color: #ff0000;">※ユーザを登録する処理はこの次に書きます。</span></p>
<p><span style="color: #ff0000;">今はエラー回避のためにユーザ一覧へ遷移するようにしています。</span></p>
<p>表示させてみると、なんかレイアウトがぐちゃぐちゃ&#8230;</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4919" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_3-2.png" alt="" width="1035" height="349" srcset="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_3-2.png 1035w, https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_3-2-300x101.png 300w, https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_3-2-1024x345.png 1024w, https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_3-2-768x259.png 768w, https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_3-2.png 856w" sizes="(max-width: 1035px) 100vw, 1035px" />
<p>DjangoでフォームにBootstrapを適用するには、普通のHTMLのようにはできません。</p>
<p>なので、端末にダウンロードしたBootstrapを適用させます。</p>
<p>何やら頑張れば適用もできるようですが、私はこちらの方法は使いませんでした。</p>
<div class="concept-box5">
<p><a href="https://qiita.com/ShortArrow/items/d5aa536feb12296b1b30" target="_blank" rel="noopener">Djangoの入力フォームにBootstrapを適用するときの最適解</a></p>
</div>
<h3>ダウンロードしたBootstrapをformに適用</h3>
<p>まずはコマンドプロンプトでBootstrapを端末にインストールします。</p><pre class="urvanov-syntax-highlighter-plain-tag">pip install django-bootstrap4</pre><p>次に、settings.pyからBootstrap4を認識させます。</p><pre class="urvanov-syntax-highlighter-plain-tag">INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    #追記
    'myapp.apps.MyappConfig',
    # django-bootstrap4
    'bootstrap4',
]</pre><p>12行目で追加をしています。</p>
<p>これで準備ができたので、先ほどのcreate.html上でBootstrapを適用させます。</p><pre class="urvanov-syntax-highlighter-plain-tag">{% extends './base.html' %}
{% load bootstrap4 %}

{% block app %}
    &lt;h1&gt;ユーザ登録&lt;/h1&gt;

    &lt;form action='{% url "showUsers" %}' method='post' class='form'&gt;
        &lt;!-- ユーザー登録フォームを表示 --&gt;
        {% csrf_token %}
        {% bootstrap_form userForm %}
        &lt;button type='submit' class='btn btn-outline-primary'&gt;登録&lt;/button&gt;
        &lt;a href='{% url "showCreateUserForm" %}' class='btn btn-outline-secondary'&gt;戻る&lt;/a&gt;
    &lt;/form&gt;
{% endblock %}</pre><p>2行目でBootstrapを読み込んでいます。</p>
<p>10行目でフォームに対してBootstrapを適用させています。</p>
<p>表示結果はこうんな感じになりました。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4920" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_4.png" alt="" width="800" height="426" />
<h2>③フォームに入力したデータをサーバに渡して登録、その後表示</h2>
<p>現状は登録ボタンクリック時にユーザ一覧を表示していますが、ユーザ一を登録する処理を呼ぶようにします。</p>
<p>まずは登録ボタンをクリックした後、DBに登録する処理を作っていきます。</p>
<h3>登録処理を呼び出す(urls.py)</h3>
<p>まずはurls.pyにユーザ追加の処理を呼ぶように記載します。</p><pre class="urvanov-syntax-highlighter-plain-tag">from django.urls import path
from . import views

urlpatterns = [
    path('', views.showUsers, name='showUsers'),

    #ユーザの詳細情報を表示する処理を呼び出す
    path('&lt;int:id&gt;', views.showDetail, name='showDetail'),
    #ユーザの登録フォームを呼び出す
    path('create', views.showCreateUserForm, name='showCreateUserForm'),
    #ユーザ登録する処理を呼び出す
    path('add', views.addUser, name='addUser'),
]</pre><p>12行目でviewsのaddUserを呼ぶように記載しています。</p>
<p>addUserの処理は次で作成します。</p>
<h3>ユーザをDBに追加する処理を作成(views.py)</h3>
<p>処理の流れとしては、以下になります。</p>
<div class="simple-box2">
<p>①フォームデータをDBに登録</p>
<p>②ユーザ一覧画面を表示</p>
</div>
<p>以下の処理を追加して①②両方ともviews.pyに記載しています。</p><pre class="urvanov-syntax-highlighter-plain-tag">#～～～～～～～～～～～～～～～～～
# フォームから受取ったデータをDBに登録する
def addUser(request):
    #リクエストがPOSTの場合
    if request.method == 'POST':
        #リクエストをもとにフォームをインスタンス化
        userForm = UserForm(request.POST)
        if userForm.is_valid():
            userForm.save()

    #登録後、全件データを抽出
    userinfo = UserInfo.objects.all()
    context = {
        'msg': '現在の利用状況',
        'userinfo': userinfo,
        'count':userinfo.count,

    #user.htmlへデータを渡す
    return render(request, 'myapp/users.html',context)</pre><p>4～9行目でPOSTのリクエストであれば、登録するという処理をしています。</p>
<p>11～19行目はユーザ一覧と同じ処理で、ユーザを全件取得して表示させています。</p>
<h3>登録ボタンクリック後にaddUserを呼ぶ(create.html)</h3>
<p>これでユーザ登録する処理が作成できました。</p>
<p>最後に、create.htmlの登録ボタンクリックした後の処理を書き換えます。</p><pre class="urvanov-syntax-highlighter-plain-tag">{% extends './base.html' %}
{% load bootstrap4 %}

{% block app %}
    &lt;h1&gt;ユーザ登録&lt;/h1&gt;

    &lt;form action='{% url "addUser" %}' method='post' class='form'&gt;
        &lt;!-- ユーザー登録フォームを表示 --&gt;
        {% csrf_token %}
        {% bootstrap_form userForm %}
        &lt;button type='submit' class='btn btn-outline-primary'&gt;登録&lt;/button&gt;
        &lt;a href='{% url "showCreateUserForm" %}' class='btn btn-outline-secondary'&gt;戻る&lt;/a&gt;
    &lt;/form&gt;
{% endblock %}</pre><p>7行目をshowUsers→addUserに書き換えました。</p>
<p><a href="http://localhost:8000/users/create" target="_blank" rel="noopener">http://localhost:8000/users/create</a>にアクセスして、</p>
<p>ユーザ情報を入力して試しに登録をしてみると。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4923" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_5.png" alt="" width="800" height="452" />
<p>上手く登録されて、一番下に「たくや」が追加されました！</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4924" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_6.png" alt="" width="800" height="572" />
<p>一応詳細ページも見てみましたが、問題なしでした！</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4925" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_7.png" alt="" width="800" height="405" />
<h2>ユーザ追加ボタンをユーザ一覧に作成(users.html)</h2>
<p>これで完了！かと思いました。</p>
<p>ただ、このままだとユーザ登録画面に行くことができません。</p>
<p>なのでユーザ一覧画面に、追加ボタンを作っておきます。</p><pre class="urvanov-syntax-highlighter-plain-tag">{% extends './base.html' %}
{% block app %}

    &lt;h1&gt;ようこそ！&lt;/h1&gt;
    &lt;!-- テーブル --&gt;
    &lt;table class="table table-striped table table-bordered "&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;th colspan="2"&gt;{{msg}}:{{count}}名&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody align="center"&gt;
            &lt;!-- count件(行)数分をループ --&gt;
            {% for user in userinfo %}
            &lt;tr&gt;
                &lt;!-- 4列分ユーザ情報を出力 --&gt;
                &lt;td&gt;{{user.userName}}&lt;/td&gt;
                &lt;td&gt;&lt;a href="{% url 'showDetail' user.id %}" class="btn btn-outline-primary"&gt;詳細&lt;/a&gt; &lt;/td&gt;
            &lt;/tr&gt;
            {% endfor %}
        &lt;/tbody&gt;
    &lt;/table&gt;
    &lt;a href="{% url 'showCreateUserForm' %}" class='btn btn-outline-primary'&gt;ユーザ追加&lt;/a&gt;
    
{% endblock %}</pre><p>23行目にユーザ登録フォームをへ遷移するボタンを追加しました。</p>
<p>これでテーブル下にボタンが追加されました。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4927" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_8.png" alt="" width="800" height="441" />
<p>今回はこれで完了です。</p>
<a href="https://t.felmat.net/fmcl?ak=Y4657Q.1.B846161.O69525F" target="_blank" rel="nofollow noopener"><img loading="lazy" decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y4657Q.B846161.O69525F" alt="" width="600" height="80" border="0" /></a>The post <a href="https://loosecarrot.com/2021/01/11/4909/">Django独学 フォームを使ってDBに新規登録をする</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2021/01/11/4909/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4909</post-id>	</item>
		<item>
		<title>(目次)Django初心者のユーザ一情報管理アプリ作成</title>
		<link>https://loosecarrot.com/2021/01/09/4856/</link>
					<comments>https://loosecarrot.com/2021/01/09/4856/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sat, 09 Jan 2021 04:20:12 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4856</guid>

					<description><![CDATA[<p>ユーザ一情報を管理アプリ作成の目次ページです。 2020年の12月末から勉強を始めたDjango初心者です。 UdemyのDjangoの基礎をマスターして、3つのアプリを作ろう！を参考に勉強していています。 勉強で得た知</p>
The post <a href="https://loosecarrot.com/2021/01/09/4856/">(目次)Django初心者のユーザ一情報管理アプリ作成</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4863" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-目次：ユーザ一情報を管理するアプリ作成を通して勉強_1-1.jpg" alt="" width="800" height="400" />
<p><strong>ユーザ一情報を管理アプリ作成の目次ページです。</strong></p>
<p>2020年の12月末から勉強を始めたDjango初心者です。</p>
<p>Udemyの<a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fdjango-3app%2F" rel="nofollow">Djangoの基礎をマスターして、3つのアプリを作ろう！</a>を参考に勉強していています。</p>
<p>勉強で得た知識を使って、<span style="color: #ff0000;">ユーザ情報を管理するアプリ</span>を作成しながら理解を深めています。</p>
<p>少しずつアプリに機能追加を加えて、内容をどんどん更新していきます。</p>
<div class="kaisetsu-box3">
<div class="kaisetsu-box3-title">こんな人におすすめ</div>
<p>Djangoの全体像が分からない</p>
<p>これからDjangoの勉強をしていきたい</p>
<p>簡単なウェブアプリを作ってみたい</p>
</div>
<p>Udemyの動画は開発環境作成の仕方から説明されているので、おススメです。</p>
<div class="concept-box6">
<p>DjangoはPython、HTML、CSCの知識も最低限必要なので、先に勉強しておいてください。</p>
<p>Udemyの動画を紹介しておきます。</p>
<p><a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fclick.linksynergy.com%2Fdeeplink%3Fid%3D9v%2A%2FTGPvI90%26mid%3D47984%26murl%3Dhttps%253A%252F%252Fwww.udemy.com%252Fcourse%252Fhtml-css-js%252F" target="new" rel="noopener">ちゃんと学ぶ、HTML/CSS + JavaScript</a></p>
<p><a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fpython-beginner%2F" target="new" rel="noopener">現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル</a></p>
</div>
<h2>私の開発環境</h2>
<p>以下の通りです。</p>
<p>Windows10</p>
<p>Python3.9</p>
<p>Visual Studio Code</p>
<h2>開発したアプリのデモと機能紹介</h2>
<p>作成したアプリのデモを行っています。</p>
<a href="https://loosecarrot.com/2023/07/03/6467/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ_機能説明-1-320x180.jpeg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Djangoでユーザ管理アプリ デモ動画とソースコード公開</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。



Djangoでユーザ管理アプリの作ったので、ソースコ...</span></div></div></a>
<h2>WEBページにDBのユーザ情報データを表示させる</h2>
<p>Djangoフレームワークの考え方から、最初のアプリ作成までを行っています。</p>
<p>Djangoの全体像が分からなかったので、整理して紹介しています。</p>
<a href="https://loosecarrot.com/2021/01/01/4711/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-WEBページにDBのユーザ情報データを表示させる_1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Django独学 WEBページにDBのユーザ情報データを表示させる</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。

https://loosecarrot.com/2023/0...</span></div></div></a>
<h2>WEBページをリンクでページ遷移させる</h2>
<p>ユーザ情報を表示させた後、詳細情報を表示する機能を追加しています。</p>
<a href="https://loosecarrot.com/2021/01/03/4775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2021/01/DjangoでWEBページにリンクを表示させる_2-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Django独学 WEBページをリンクでページ遷移させる</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。

https://loosecarrot.com/2023/0...</span></div></div></a>
<h2>DBに列を追加してWEBアプリに表示</h2>
<p>列を追加して、ページに表示するまでの流れを解説しています。</p>
<a href="https://loosecarrot.com/2021/01/04/4855/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-DBに列を追加してWEBアプリに表示_4-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Django独学 DBに列を追加してWEBアプリに表示</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。

https://loosecarrot.com/2023/0...</span></div></div></a>
<h2>共通化したhtmlテンプレートを反映させる</h2>
<p>HTMLのテンプレートを共通化させて、各アプリに反映をさせています。</p>
<a href="https://loosecarrot.com/2021/01/05/4881/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-共通化したhtmlテンプレートを反映させる_5-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Django独学 共通化したhtmlテンプレートを反映させる</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。

https://loosecarrot.com/2023/0...</span></div></div></a>
<h2>Bootstrapでボタンやページを良い感じに表示</h2>
<p>ある程度形にはなるところまで作りました。</p>
<p>ただ、見た目がダサかったBootstrapを適用して見栄えを整えています。</p>
<a href="https://loosecarrot.com/2021/01/06/4898/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-Bootstrapでボタンやページを良い感じに表示_1-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Django独学 Bootstrapでボタンやページを良い感じに表示</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。

https://loosecarrot.com/2023/0...</span></div></div></a>
<h2>フォームを使ってDBに新規登録をする</h2>
<p>フォーム呼出して、入力した内容をDBに登録する処理を作りました。</p>
<a href="https://loosecarrot.com/2021/01/11/4909/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBに新規登録をする_9-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Django独学 フォームを使ってDBに新規登録をする</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。

https://loosecarrot.com/2023/0...</span></div></div></a>
<h2>フォームを使ってDBを更新する</h2>
<p>フォーム呼出して、入力した内容をDBに更新する処理を作りました。</p>
<a href="https://loosecarrot.com/2021/01/17/4937/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-フォームを使ってDBを更新する_7-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Django独学 フォームを使ってDBを更新する</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。

https://loosecarrot.com/2023/0...</span></div></div></a>
<h2>Django独学でwebアプリのサイトを立ち上げてみた!</h2>
<p>Django独学から2か月半ほど経ちました。</p>
<p>いろいろできないことは多いですが、WEBサイトを立ち上げました。</p>
<a href="https://loosecarrot.com/2021/03/07/5066/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2021/03/Djangoでwebアプリのサイトを立ち上げてみた-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Django独学でwebアプリのサイトを立ち上げてみた!</span><span class="blog-card-excerpt">

2021年2月14日のバレンタインデーのことです。

一人家でPCに向かい続けながら、

文系出身のSEですが、開発して...</span></div></div></a>
<p><a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Flaravel-multi-ec%2F" target="_blank" rel="noopener">laravel開発</a></p>The post <a href="https://loosecarrot.com/2021/01/09/4856/">(目次)Django初心者のユーザ一情報管理アプリ作成</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2021/01/09/4856/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4856</post-id>	</item>
		<item>
		<title>Django独学 Bootstrapでボタンやページを良い感じに表示</title>
		<link>https://loosecarrot.com/2021/01/06/4898/</link>
					<comments>https://loosecarrot.com/2021/01/06/4898/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Wed, 06 Jan 2021 12:11:49 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4898</guid>

					<description><![CDATA[<p>Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリ デモ動画とソースコード公開 Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリの作っ</p>
The post <a href="https://loosecarrot.com/2021/01/06/4898/">Django独学 Bootstrapでボタンやページを良い感じに表示</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4899" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-Bootstrapでボタンやページを良い感じに表示_1.png" alt="" width="800" height="400" />
<p>Djangoのユーザ管理アプリ作成の<a href="https://loosecarrot.com/2021/01/09/4856/">目次ページ</a>はこちらです。</p>
<a href="https://loosecarrot.com/2023/07/03/6467/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ_機能説明-1-320x180.jpeg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Djangoでユーザ管理アプリ デモ動画とソースコード公開</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。



Djangoでユーザ管理アプリの作ったので、ソースコ...</span></div></div></a>
<p>&nbsp;</p>
<p>今回は、Bootstrapを使って見栄えをええ感じに表示させたいと思います。</p>
<p>Udemyの<a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fdjango-3app%2F" rel="nofollow">Djangoの基礎をマスターして、3つのアプリを作ろう！</a>を参考に勉強していています。</p>
<p>※<a href="https://getbootstrap.jp/docs/4.5/getting-started/introduction/" target="_blank" rel="noopener">bootstrap</a>を使うため、HTMLの基礎知識が必要です。</p>
<div class="concept-box5">
<p>Udemy講座を載せておきます。</p>
<p>「BootstrapをCDNで利用する」だけであれば無料で見れます。</p>
<p><a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fclick.linksynergy.com%2Fdeeplink%3Fid%3D9v%2A%2FTGPvI90%26mid%3D47984%26murl%3Dhttps%253A%252F%252Fwww.udemy.com%252Fcourse%252Fhtml-css-js%252F" target="new" rel="noopener">ちゃんと学ぶ、HTML/CSS + JavaScript</a></p>
</div>
<h2>Bootstrapを使えばデザインを楽にかっこよくできる</h2>
<p>本来だと、自分でCSSファイルを作って各ボタンやテーブルに当て込む必要があります。</p>
<p>でもBootstrapはすでにきれいな表示ができるCSSが用意されています。</p>
<p>それをそのまま読み込んで使うことで、楽にコーディングができます。</p>
<p>また、Bootstrapはダウンロードして、自分用に<span style="color: #ff0000;">カスタマイズ</span>することも可能です。</p>
<p>今回は特にカスタマイズしません。</p>
<div class="concept-box2">
<p>共通テンプレートのbase.htmlにBootstrapを読み込むコードを書いています。</p>
<p>各htmlファイルはbase.htmlを継承しているので、Bootstrapを読み込むコードは出てきません。</p>
</div>
<h2>users.htmlのテーブルにbootstrapを適用</h2>
<p>ユーザ一覧のテーブルは特に装飾をしていません。</p>
<p>なので、シンプル過ぎて見栄えが良くないです。</p>
<p>現在の表示がこちらです。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4891" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-共通化したhtmlテンプレートを反映させる_3.png" alt="" width="568" height="435" />
<p>ここで、テーブルにBootstrapのCSSを適用します。</p>
<p>ついでに、「名前」と「詳細」ボタンを付けます。</p><pre class="urvanov-syntax-highlighter-plain-tag">{% extends './base.html' %}
{% block app %}

    &lt;h1&gt;ようこそ！&lt;/h1&gt;
    &lt;!-- テーブル --&gt;
    &lt;table class="table table-striped table table-bordered "&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;th colspan="2"&gt;{{msg}}:{{count}}名&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody align="center"&gt;
            &lt;!-- count件(行)数分をループ --&gt;
            {% for user in userinfo %}
            &lt;tr&gt;
                &lt;!-- 4列分ユーザ情報を出力 --&gt;
                &lt;td&gt;{{user.userName}}&lt;/td&gt;
                &lt;td&gt;&lt;a href="{% url 'showDetail' user.id %}" class="btn btn-outline-primary"&gt;詳細&lt;/a&gt; &lt;/td&gt;
            &lt;/tr&gt;
            {% endfor %}
        &lt;/tbody&gt;
    &lt;/table&gt;
    
{% endblock %}</pre><p>6行目でテーブルに2つのスタイルを適用しています。</p>
<p>table table-stripedは奇数行が灰色に変わります。</p>
<p>table table-borderedは枠線が付きます。</p>
<p>17、18行目で名前と詳細のリンクを1つのセルに入れるようにしています。</p>
<p>また、18行目でclass=&#8221;btn btn-outline-primary&#8221;を使って</p>
<p>リンクをボタンのように表示しています。</p>
<p>表示結果はこんな感じです。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4903" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-Bootstrapでボタンやページを良い感じに表示_2-1.png" alt="" width="800" height="622" />
<h2>detail.htmlのテーブルにbootstrapを適用</h2>
<p>ユーザ詳細ページも特にCSSは適用していないので、とてもシンプルです。</p>
<p>テーブルと「ユーザ一覧へ」のリンクのスタイルを変更してみます。</p>
<p>テーブルは1列の中で「：」で区切られているのはダサいので、ついでに2列にします。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4892" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-共通化したhtmlテンプレートを反映させる_4.png" alt="" width="571" height="394" /></p><pre class="urvanov-syntax-highlighter-plain-tag">{% extends './base.html' %}
{% block app %}

    &lt;h1&gt;ユーザの詳細情報です。&lt;/h1&gt;
    
    &lt;!-- テーブル --&gt;
    &lt;table class="table table-striped table table-bordered"&gt;
        &lt;!-- 5行分ユーザ情報を出力 --&gt;
        &lt;tbody align="center"&gt;
            &lt;tr&gt;
                &lt;td&gt;ID&lt;/td&gt;
                &lt;td&gt;{{userinfoDetail.id}}&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;名前&lt;/td&gt;
                &lt;td&gt;{{userinfoDetail.userName}}&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;出身国&lt;/td&gt;
                &lt;td&gt;{{userinfoDetail.country}}&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;住所&lt;/td&gt;
                &lt;td&gt;{{userinfoDetail.address}}&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;性別&lt;/td&gt;
                &lt;td&gt;{{userinfoDetail.sex}}&lt;/td&gt;
            &lt;/tr&gt;                
            &lt;tr&gt;
                &lt;td&gt;自己紹介&lt;/td&gt;
                &lt;td&gt;{{userinfoDetail.selfIntroduction|linebreaksbr}}&lt;/td&gt;                
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;

    &lt;a href="{% url 'showUsers' %}" class="btn btn-outline-info"&gt;ユーザ一覧へ&lt;/a&gt;

{% endblock %}</pre><p>7行目のテーブルタグに対しては、先ほどと同じスタイルを適用しています。</p>
<p>10行目～33行目で2列にそれぞれの情報をセットさせるように変更しています。</p>
<p>37行目で「ユーザ一覧へ」のリンクに対して、ボタン表示になるよう設定をしています。</p>
<p>表示してみると、こちらもええ感じに表示されていました。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4905" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-Bootstrapでボタンやページを良い感じに表示_3.png" alt="" width="800" height="503" />
<a href="https://t.felmat.net/fmcl?ak=Y4657Q.1.B846161.O69525F" target="_blank" rel="nofollow noopener"><img loading="lazy" decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y4657Q.B846161.O69525F" alt="" width="600" height="80" border="0" /></a>
<div class="concept-box5">
<p>Bootstrapのスタイルは数多くあり、ググれば色々出てきます。</p>
<p>ボタンのスタイルはこちらを参考にしたので良ければ見てください。</p>
<p><a href="http://www.tohoho-web.com/bootstrap/buttons.html" target="_blank" rel="noopener">とほほのBootstrap 4入門</a></p>
</div>The post <a href="https://loosecarrot.com/2021/01/06/4898/">Django独学 Bootstrapでボタンやページを良い感じに表示</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2021/01/06/4898/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4898</post-id>	</item>
		<item>
		<title>Django独学 共通化したhtmlテンプレートを反映させる</title>
		<link>https://loosecarrot.com/2021/01/05/4881/</link>
					<comments>https://loosecarrot.com/2021/01/05/4881/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Tue, 05 Jan 2021 06:38:27 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4881</guid>

					<description><![CDATA[<p>Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリ デモ動画とソースコード公開 Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリの作っ</p>
The post <a href="https://loosecarrot.com/2021/01/05/4881/">Django独学 共通化したhtmlテンプレートを反映させる</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4893" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-共通化したhtmlテンプレートを反映させる_5.png" alt="" width="800" height="400" />
<p>Djangoのユーザ管理アプリ作成の<a href="https://loosecarrot.com/2021/01/09/4856/">目次ページ</a>はこちらです。</p>
<a href="https://loosecarrot.com/2023/07/03/6467/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ_機能説明-1-320x180.jpeg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Djangoでユーザ管理アプリ デモ動画とソースコード公開</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。



Djangoでユーザ管理アプリの作ったので、ソースコ...</span></div></div></a>
<p>&nbsp;</p>
<p>少し見栄えもかっこよくしたいので、今回は共通テンプレートを作成して、各テンプレートに反映させます。</p>
<p>Udemyの<a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fdjango-3app%2F" rel="nofollow">Djangoの基礎をマスターして、3つのアプリを作ろう！</a>を参考に勉強していています。</p>
<p>※<a href="https://getbootstrap.jp/docs/4.5/getting-started/introduction/" target="_blank" rel="noopener">bootstrap</a>を使うため、HTMLの基礎知識が必要です。</p>
<div class="concept-box5">
<p>Udemy講座を載せておきます。</p>
<p>「BootstrapをCDNで利用する」だけであれば<span style="color: #ff0000;">無料</span>で見れます。</p>
<p><a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fclick.linksynergy.com%2Fdeeplink%3Fid%3D9v%2A%2FTGPvI90%26mid%3D47984%26murl%3Dhttps%253A%252F%252Fwww.udemy.com%252Fcourse%252Fhtml-css-js%252F" target="new" rel="noopener">ちゃんと学ぶ、HTML/CSS + JavaScript</a></p>
</div>
<h2>テンプレート共通化のメリット</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4882" src="https://loosecarrot.com/wp-content/uploads/2021/01/common-header-footer-1.png" alt="" width="800" height="400" />
<p>テンプレートを共通化しておくと、コーディング数を減らすことができます。</p>
<p>例えば、htmlのテンプレートが5つあり、共通の箇所があったとします。</p>
<p>共通テンプレートがない場合、5つすべてを修正する必要があります。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4883" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-共通化したhtmlテンプレートを反映させる_1.png" alt="" width="800" height="400" />
<p>共通テンプレートのbase.htmlを作れば、baseを修正すれば、5つに反映させることができます。</p>
<h2>共通テンプレートのbase.htmlを作成する</h2>
<p>作っていく共通テンプレートは上記のようなものです。</p>
<p>ヘッダーとフッターは共通です。</p>
<p>真ん中には作ったアプリが入ります。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4885" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-共通化したhtmlテンプレートを反映させる_2-1.png" alt="" width="519" height="288" />
<p>以下に、base.htmlというファイルを作成します。</p>
<p>C:\django\myproject\myapp\templates\myapp</p>
<p>base.html中身は以下のように作っています。</p><pre class="urvanov-syntax-highlighter-plain-tag">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;!-- Bootstrap読込み --&gt;
        &lt;meta charset="utf-8"&gt;
        &lt;meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"&gt;

        &lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"&gt;
        &lt;!-- Bootstrap読込み --&gt;
        
        &lt;!-- 表示全体を中央に揃える --&gt;
        &lt;style&gt;body {padding-top: 50px;}&lt;/style&gt;

        &lt;!-- ナビゲーションバー --&gt;
        &lt;nav class="navbar navbar-light bg-light fixed-top"&gt;
            &lt;a class='navbar-brand' href='{% url "showUsers" %}'&gt;Djangoでユーザ情報管理アプリ&lt;/a&gt;
        &lt;/nav&gt;
    &lt;/head&gt;

    &lt;!-- ボディー --&gt;
    &lt;body&gt;
        &lt;div class='container'&gt;
            {% block app %}
            {% endblock %}
        &lt;/div&gt;
    &lt;/body&gt;

    &lt;!-- フッター --&gt;
    &lt;footer&gt;
        &lt;div class="p-3 mb-2 bg-light text-dark"&gt;
            &lt;p&gt;&amp;copy; 文系出身のSEですが、何か&lt;/p&gt;
        &lt;/div&gt;
    &lt;/footer&gt;

&lt;/html&gt;</pre><p>ヘッダーとフッターを作っています。</p>
<p>因みに、4～9行目でBootstrapを読み込んでいます。</p>
<p>特に何かをインストールする必要はなく、サイトに公開されているCSSを読み込んでいます。</p>
<p>12行目でbodyの表示を少し真ん中よりにしています。</p>
<p>23、24行目はボディの記載をしています。</p>
<p>{% block app %}～{% endblock %}の中に各アプリを読み込む場所です。</p>
<h2>users.htmlとdetail.htmlに共通部分を継承させる</h2>
<p>それぞれ2ファイルにbase.htmlを継承させて、共通部分を反映させます。</p>
<p>共通化したのはbodyタグ以外の部分です。</p>
<p>なので、bodyタグの中身以外を残して以下のように書き換えます。</p>
<h3>users.html</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">{% extends './base.html' %}
{% block app %}

    &lt;h1&gt;ようこそ！&lt;/h1&gt;
    &lt;!-- テーブル --&gt;
    &lt;table border="1" style="border-collapse: collapse"&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;!-- &lt;th colspan="2"&gt;{{msg}}:{{count}}名&lt;/th&gt; --&gt;
                &lt;th&gt;{{msg}}:{{count}}名&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;!-- count件(行)数分をループ --&gt;
            {% for user in userinfo %}
            &lt;tr&gt;
                &lt;!-- 4列分ユーザ情報を出力 --&gt;
                &lt;td&gt;&lt;a href="{% url 'showDetail' user.id %}"&gt;{{user.userName}}&lt;/a&gt; &lt;/td&gt;
            &lt;/tr&gt;
            {% endfor %}
        &lt;/tbody&gt;
    &lt;/table&gt;
    
{% endblock %}</pre><p></p>
<h3>detail.html</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">{% extends './base.html' %}
{% block app %}

    &lt;h1&gt;ユーザの詳細情報です。&lt;/h1&gt;
    &lt;!-- テーブル --&gt;
    &lt;table&gt;
        &lt;tbody&gt;
            &lt;tr&gt;
                &lt;!-- 5列分ユーザ情報を出力 --&gt;
                &lt;td&gt;ID：{{userinfoDetail.id}}           &lt;br&gt;
                    名前：{{userinfoDetail.userName}}   &lt;br&gt;
                    出身国：{{userinfoDetail.country}}  &lt;br&gt;
                    住所：{{userinfoDetail.address}}    &lt;br&gt;
                    性別：{{userinfoDetail.sex}}        &lt;br&gt;
                    &lt;!-- 自己紹介列を追加 --&gt;
                    自己紹介：{{userinfoDetail.selfIntroduction|linebreaksbr}}
                &lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;

    &lt;a href="{% url 'showUsers' %}"&gt;ユーザ一覧へ&lt;/a&gt;

{% endblock %}</pre><p>&nbsp;</p>
<p>bodyタグ以降の中身を<span style="color: #ff0000;">{% block app %}</span>と<span style="color: #0000ff;">{% endblock %}</span>で囲むだけでOKです。</p>
<p>ユーザ一覧画面を表示させてみると以下の通り上手くできました！</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4891" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-共通化したhtmlテンプレートを反映させる_3.png" alt="" width="568" height="435" />
<p>ここから、英二をクリックして詳細ページを見てみると&#8230;<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4892" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-共通化したhtmlテンプレートを反映させる_4.png" alt="" width="571" height="394" /></p>The post <a href="https://loosecarrot.com/2021/01/05/4881/">Django独学 共通化したhtmlテンプレートを反映させる</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2021/01/05/4881/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4881</post-id>	</item>
		<item>
		<title>Django独学 DBに列を追加してWEBアプリに表示</title>
		<link>https://loosecarrot.com/2021/01/04/4855/</link>
					<comments>https://loosecarrot.com/2021/01/04/4855/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Mon, 04 Jan 2021 05:50:23 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4855</guid>

					<description><![CDATA[<p>Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリ デモ動画とソースコード公開 Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリの作っ</p>
The post <a href="https://loosecarrot.com/2021/01/04/4855/">Django独学 DBに列を追加してWEBアプリに表示</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4876" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-DBに列を追加してWEBアプリに表示_4.jpg" alt="" width="800" height="400" />
<p>Djangoのユーザ管理アプリ作成の<a href="https://loosecarrot.com/2021/01/09/4856/">目次ページ</a>はこちらです。</p>
<a href="https://loosecarrot.com/2023/07/03/6467/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ_機能説明-1-320x180.jpeg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Djangoでユーザ管理アプリ デモ動画とソースコード公開</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。



Djangoでユーザ管理アプリの作ったので、ソースコ...</span></div></div></a>
<p>&nbsp;</p>
<p>今回はDBに列を追加して、追加した列を表示させます。</p>
<p>Udemyの<a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fdjango-3app%2F" rel="nofollow">Djangoの基礎をマスターして、3つのアプリを作ろう！</a>を参考に勉強していています。</p>
<h2>Djangoで追加する機能の概要</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4866" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-目次：ユーザ一情報を管理するアプリ作成を通して勉強_1-コピー.jpg" alt="" width="800" height="400" />
<p>ユーザの詳細ページに自己紹介を表示させます。</p>
<p>データベースに自己紹介の列がないので、列追加から行います。</p>
<h2>Models.pyから列を追加</h2>
<p>データベースの定義を決めて作成したのは、models.pyのファイルでした。</p>
<p>なので、今回もModels.pyに追記をします。</p>
<p>内容は以下の通りです。</p><pre class="urvanov-syntax-highlighter-plain-tag">from django.db import models

# Create your models here.
#ユーザ情報のDB情報
class UserInfo(models.Model):
    userName = models.CharField(max_length=200)
    country = models.CharField(max_length=50, null=True)
    sex = models.CharField(max_length=200, null=True)
    address = models.CharField(max_length=200, null=True)
     
    #自己紹介列を追加
    selfIntroduction = models.CharField(max_length=500, null=True)</pre><p>自己紹介の列を追加します。</p>
<p>その後、マイグレーションファイルを作成し、DBへ反映します。</p><pre class="urvanov-syntax-highlighter-plain-tag">マイグレーションファイルを作成
cd C:\django\myproject
python manage.py makemigrations myapp

マイグレーションファイルからDBへ反映
python manage.py migrate</pre><p>これでDBに自己紹介の列が追加されました。</p>
<p>今回はDBに自己紹介を直接登録します。</p>
<p>今はユーザ情報をメンテナンスる機能はないためです。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4867" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-DBに列を追加してWEBアプリに表示_1.jpg" alt="" width="800" height="400" />
<div class="concept-box6">
<p>python manage.py makemigrations myapp</p>
<p>を行うと、C:\django\myproject\myapp\migrationsの中に</p>
<p>「0002_userinfo_selfintroduction.py」ができます。</p>
<p>ここには列追加をする情報がかかれています。</p>
</div>
<h2>detail.htmlを修正して、自己紹介列を表示させる</h2>
<p>detail.htmlを修正して、自己紹介列を表示できるように修正していきます。</p><pre class="urvanov-syntax-highlighter-plain-tag">&lt;!-- テーブル --&gt;
    &lt;table&gt;
        &lt;tbody&gt;
            &lt;tr&gt;
                &lt;!-- 5列分ユーザ情報を出力 --&gt;
                &lt;td&gt;ID：{{userinfoDetail.id}}           &lt;br&gt;
                    名前：{{userinfoDetail.userName}}   &lt;br&gt;
                    出身国：{{userinfoDetail.country}}  &lt;br&gt;
                    住所：{{userinfoDetail.address}}    &lt;br&gt;
                    性別：{{userinfoDetail.sex}}        &lt;br&gt;
                    &lt;!-- 自己紹介列を追加 --&gt;
                    自己紹介：{{userinfoDetail.selfIntroduction}}
                &lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;</pre><p>12行目で追加した自己紹介列を表示させています。</p>
<p>結果はこんな感じです。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4870" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-DBに列を追加してWEBアプリに表示_2-1.jpg" alt="" width="659" height="200" />
<div class="concept-box6">
<p>views.pyデータを抽出する箇所は修正不要です。</p>
<p>userinfoDetail = get_object_or_404(UserInfo,pk=id)</p>
<p>上記ですべての列の情報を抽出して、detail.htmlに渡しているいるからです。</p>
<p>そのため、増えた列を表示する修正をhtml側に行えばOKなのです。</p>
</div>
<h2>少し発展編：DB登録した改行をHTML側でも反映させる</h2>
<p>先ほどの表示結果、実はDBに登録した改行が反映されていません。</p>
<p>本当は以下のように登録されています。</p>
<div class="simple-box2">
<p>ゆいです。<br />
プログラミングスクールに行くか迷っています！<br />
情報を下さい！</p>
</div>
<p>DBに登録されている改行コードはHTMLの&lt;br&gt;ではないためです。</p>
<p>対応方法としては、{{変数<span style="color: #ff0000;">|linebreaksbr</span>}}とするだけです。</p><pre class="urvanov-syntax-highlighter-plain-tag">&lt;!-- 自己紹介列を追加 --&gt;
自己紹介：{{userinfoDetail.selfIntroduction|linebreaksbr}}</pre><p>表示結果を見てみると上手く改行されました。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4871" src="https://loosecarrot.com/wp-content/uploads/2021/01/Django独学-DBに列を追加してWEBアプリに表示_3.jpg" alt="" width="392" height="241" />
<p>改行が含まれるデータを扱うことがある場合は、覚えておいてください。</p>
<a href="https://loosecarrot.com/2021/01/08/4832/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2021/01/独学にはないプログラミングスクールの価値を実体験から解説_2-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">独学にはないプログラミングスクールの価値を実体験から解説</span><span class="blog-card-excerpt">

「お金がかかるプログラミングスクールではなく独学ではダメかな？」

「プログラミングスクールのどういう所がいいのかなぁ？」...</span></div></div></a>
<div class="concept-box5">
<p><a href="https://www.366service.com/jp/qa/6ca928f6db29751c8f22bdcf5fbc12bc" target="_blank" rel="noopener">Djangoはデータベースからテキストをレンダリングするときに改行文字を表示しません</a></p>
</div>The post <a href="https://loosecarrot.com/2021/01/04/4855/">Django独学 DBに列を追加してWEBアプリに表示</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2021/01/04/4855/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4855</post-id>	</item>
		<item>
		<title>Django独学 WEBページをリンクでページ遷移させる</title>
		<link>https://loosecarrot.com/2021/01/03/4775/</link>
					<comments>https://loosecarrot.com/2021/01/03/4775/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 03 Jan 2021 12:58:58 +0000</pubDate>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4775</guid>

					<description><![CDATA[<p>Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリ デモ動画とソースコード公開 Djangoのユーザ管理アプリ作成の目次ページはこちらです。 Djangoでユーザ管理アプリの作っ</p>
The post <a href="https://loosecarrot.com/2021/01/03/4775/">Django独学 WEBページをリンクでページ遷移させる</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4799" src="https://loosecarrot.com/wp-content/uploads/2021/01/DjangoでWEBページにリンクを表示させる_2-1.jpg" alt="" width="800" height="400" />
<p>Djangoのユーザ管理アプリ作成の<a href="https://loosecarrot.com/2021/01/09/4856/">目次ページ</a>はこちらです。</p>
<a href="https://loosecarrot.com/2023/07/03/6467/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2023/07/DJangoユーザ管理管理アプリ_機能説明-1-320x180.jpeg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Djangoでユーザ管理アプリ デモ動画とソースコード公開</span><span class="blog-card-excerpt">

Djangoのユーザ管理アプリ作成の目次ページはこちらです。



Djangoでユーザ管理アプリの作ったので、ソースコ...</span></div></div></a>
<p>&nbsp;</p>
<p>Djangoの独学を2020年の12月末からしています。</p>
<p>DBからデータを抽出して表示させるところは<a href="https://loosecarrot.com/2021/01/01/4711/" target="_blank" rel="noopener">DjangoでWEBページにDBのユーザ情報データを表示させる</a>で行っています。</p>
<p>次は、リンクを表示させてみたいと思います。</p>
<p>因みに、私はUdemyの<a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fdjango-3app%2F" rel="nofollow">Djangoの基礎をマスターして、3つのアプリを作ろう！</a>を参考に勉強していています。</p>
<p>ブログで備忘録を兼ねて発信しています。</p>
<h2>Djangoで実装する内容</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4784" src="https://loosecarrot.com/wp-content/uploads/2021/01/DjangoでWEBページにリンクを表示させる_1-1.jpg" alt="" width="800" height="400" />
<p><a href="https://loosecarrot.com/2021/01/01/4711/" target="_blank" rel="noopener">DjangoでWEBページにDBのユーザ情報データを表示させる</a>で作った名前を表示させるところから、修正をしていきます。</p>
<p>ユーザ名をリンクにさせます。</p>
<p>そして、リンクをクリックするとユーザ情報の詳細を表示させます。</p>
<p>キー情報はユーザIDで、URLは「&#8230;/users/IDの番号」になります。</p>
<h2>[&#8230;/users/IDの番号]へアクセス時に、詳細情報を表示させる</h2>
<p>まずは、idのURLへアクセスしたときに、ユーザの詳細情報を表示させるところを作ります。</p>
<p>流れとしては、以下です。</p>
<div class="simple-box2">
<p>①&#8230;/users/1にアクセス</p>
<p>②ユーザIDが1のデータを抽出</p>
<p>③ページに詳細情報を表示させる</p>
</div>
<h3>アプリのurls.pyにユーザの詳細情報を表示させる処理を追加</h3>
<p>まずはアプリのurls.pyにユーザの詳細情報を表示する処理を呼び出すよう記述します。</p><pre class="urvanov-syntax-highlighter-plain-tag">urlpatterns = [
    path('', views.showUsers, name='showUsers'),

    #ユーザの詳細情報を表示する処理を呼び出す
    path('&lt;int:id&gt;', views.showDetail, name='showDetail'),
]</pre><p><span style="color: #ff0000;">※showDetailの処理はこの次に作成します。</span></p>
<p>これで、アプリのURL(&#8230;/user/)の後ろが数字だった場合、</p>
<p>views.pyのshowDetailを呼び出すよう記述できました。</p>
<h3>views.pyにshowDetailを作成し、ページにユーザ情報を渡す</h3>
<p>次に、ユーザ情報取得して、htmlページにユーザ情報を渡す処理を作ります。</p><pre class="urvanov-syntax-highlighter-plain-tag">from django.shortcuts import render
from django.http import HttpResponse

#ユーザの詳細情報取得用に追加
from django.shortcuts import get_object_or_404

from .models import UserInfo

# ユーザ情報を辞書に格納して、users.htmlに返す
def showUsers(request):
    userinfo = UserInfo.objects.all()
    context = {
        'msg': '現在の利用状況',
        'userinfo': userinfo,
        'count':userinfo.count,
    }
    
    return render(request, 'myapp/users.html',context)

# URLから受取ったidをもとにユーザの詳細情報を取得して、detail.htmlへ返す
def showDetail(request,id):
    #URLのidをもとに、ユーザ情報を抽出
    userinfoDetail = get_object_or_404(UserInfo,pk=id)

    context = {
        'userinfoDetail':userinfoDetail,
    }

    #detail.htmlへデータを渡す
    return render(request, 'myapp/detail.html',context)</pre><p><span style="color: #ff0000;">※detail.htmlはこの次に作成します。</span></p>
<p>追加箇所は、5行目と20~30行目です。</p>
<p>5行目のクラスimportについて</p>
<p>「from django.shortcuts import get_object_or_404」では、</p>
<p>ページが存在すれば表示、しなければ404エラーを出すクラスをimportしています。</p>
<p>&nbsp;</p>
<p>20~30行目のshowDetailメソッドについて</p>
<p>idに一致するデータを抽出しています。</p>
<p>抽出したデータを辞書型のcontext変数へ格納して、detail.htmlへ渡しています。</p>
<h3>ページ側でユーザの詳細情報を表示</h3>
<p><span style="color: #ff0000;">detail.html</span>は未作成のため、まず以下のようなHTMLを作成します。</p>
<p>配置場所：C:\django\myproject\myapp\templates\myapp\detail.html</p>
<p>htmlとPythonは以下のように記述します。</p><pre class="urvanov-syntax-highlighter-plain-tag">&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta charset="utf-8"&gt;
    &lt;title&gt;ユーザの詳細情報&lt;/title&gt;
    
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;ユーザの詳細情報です。&lt;/h1&gt;
    &lt;!-- テーブル --&gt;
    &lt;table&gt;
        &lt;tbody&gt;
            &lt;tr&gt;
                &lt;!-- 5列分ユーザ情報を出力 --&gt;
                &lt;td&gt;ID：{{userinfoDetail.id}}           &lt;br&gt;
                    名前：{{userinfoDetail.userName}}   &lt;br&gt;
                    出身国：{{userinfoDetail.country}}  &lt;br&gt;
                    住所：{{userinfoDetail.address}}    &lt;br&gt;
                    性別：{{userinfoDetail.sex}}
                &lt;/td&gt;
            &lt;/tr&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;

    &lt;a href="{% url 'showUsers' %}"&gt;ユーザ一覧へ&lt;/a&gt;

&lt;/body&gt;</pre><p>テーブルの1セルにすべての情報を出力しています。</p>
<p>15行目～20行目について</p>
<p>渡した変数の「userinfoDetail.列名」で中身を取得できます。</p>
<p>&nbsp;</p>
<p>また、25行目ではユーザ一覧に戻るようリンクを埋めています。</p>
<p>&lt;a href=&#8221;{% url &#8216;showUsers&#8217; %}&#8221;&gt;ユーザ一覧へ&lt;/a&gt;の書き方について。</p>
<p>urls.pyのurlpatternsで設定した名称を使って、遷移先を内部のリンクの場合指定できます。</p>
<div class="concept-box6">
<p>内部リンクの名称について</p>
<p>名称はurls.pyのurlpatternsで設定した、<span style="color: #ff0000;">name=の名称</span>です。</p>
<p>今回のアプリで言うと、黄色で囲んでいるところが名称です。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4790" src="https://loosecarrot.com/wp-content/uploads/2021/01/DjangoでWEBページにリンクを表示させる_5.jpg" alt="" width="619" height="252" />
<p>以下になぜそんな書き方をするのかが載っていました。</p>
<p><a href="https://hodalog.com/how-to-add-url-link-in-django/" target="_blank" rel="noopener">DjangoアプリのURLリンクの貼り方とメリット</a></p>
</div>
<p>&nbsp;</p>
<p>例えば、ユーザIDの1をURLに指定して、<a href="http://127.0.0.1:8000/users/1" target="_blank" rel="noopener">http://127.0.0.1:8000/users/1</a>を表示すると&#8230;</p>
<p>表示できました！</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4788" src="https://loosecarrot.com/wp-content/uploads/2021/01/DjangoでWEBページにリンクを表示させる_3-1.jpg" alt="" width="467" height="307" />
<p>データベースと同じ情報を表示できていますね。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4787" src="https://loosecarrot.com/wp-content/uploads/2021/01/DjangoでWEBページにリンクを表示させる_4.jpg" alt="" width="568" height="420" />
<h2>ユーザ一覧のユーザ名から詳細ページのリンクにする</h2>
<p><span style="font-size: 1em; letter-spacing: 0.05em;">ここからはユーザ一覧(&#8230;/users/)のページから詳細ページへ移動するリンクを作成します。</span></p>
<h3>users.htmlで各ユーザの詳細情報のリンクを設定する</h3>
<p>リンクする先のURLは<span style="font-size: 1em; letter-spacing: 0.05em;">&#8230;/users/idになればOKです。</span></p><pre class="urvanov-syntax-highlighter-plain-tag">&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta charset="utf-8"&gt;
    &lt;title&gt;sample&lt;/title&gt;
    
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;ようこそ！&lt;/h1&gt;
    &lt;!-- テーブル --&gt;
    &lt;table border="1" style="border-collapse: collapse"&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;!-- &lt;th colspan="2"&gt;{{msg}}:{{count}}名&lt;/th&gt; --&gt;
                &lt;th&gt;{{msg}}:{{count}}名&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
            &lt;!-- count件(行)数分をループ --&gt;
            {% for user in userinfo %}
            &lt;tr&gt;
                &lt;!-- 4列分ユーザ情報を出力 --&gt;
                &lt;td&gt;&lt;a href="{% url 'showDetail' user.id %}"&gt;{{user.userName}}&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            {% endfor %}
        &lt;/tbody&gt;
    &lt;/table&gt;
&lt;/body&gt;</pre><p>23行目を修正して、ユーザ名を出力するループ内でリンクを設定しています。</p>
<p>ページを表示するとこんな感じでうまくリンクになりました！</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4792" src="https://loosecarrot.com/wp-content/uploads/2021/01/DjangoでWEBページにリンクを表示させる_6.jpg" alt="" width="336" height="397" />
<p><span class="crayon-o">&lt;</span><span class="crayon-i">a</span> <span class="crayon-v">href</span><span class="crayon-o">=</span><span class="crayon-s">&#8220;{% url <span style="color: #ff0000;">&#8216;showDetail&#8217;</span> <span style="color: #0000ff;">user.id</span> %}&#8221;</span><span class="crayon-o">&gt;</span><span class="crayon-sy">{</span><span class="crayon-sy">{</span><span class="crayon-v">user</span><span class="crayon-sy">.</span><span class="crayon-v">userName</span><span class="crayon-sy">}</span><span class="crayon-sy">}</span><span class="crayon-o">&lt;</span><span class="crayon-o">/</span><span class="crayon-e">a</span><span class="crayon-o">&gt;</span></p>
<div class="concept-box6">
<p>引数を渡してURLのリンクを作る方法</p>
<p>リンク先は先ほどユーザ一覧のリンクと同じように、名称を使って設定しています。</p>
<p>ただ、<span class="crayon-s">showDetail</span>だけだと、idをURLにセットできません。</p>
<p>そこで、urlタグに<span style="color: #0000ff;">引数</span>を付けて渡すことができます。</p>
<p><a href="https://qiita.com/tatamyiwathy/items/244d1bf10e585569213c" target="_blank" rel="noopener">Djangoのテンプレートのurlタグにパラメータをつける方法</a></p>
</div>
<h2>Djangoは反復していけば理解も追いつく</h2>
<p>ここまで2週間ほどDjangoの勉強をしてきました。</p>
<p>冬休みにテレビも見ず、1日9時間くらいやっています。</p>
<p><a href="https://loosecarrot.com/2021/01/01/4711/" target="_blank" rel="noopener">DjangoでWEBページにDBのユーザ情報データを表示させる</a>の動画だけでは分からないことは、さらにググっています。</p>
<p>そうして、ようやくDjangoの考え方や動きに慣れてきました。</p>
<p>また、HTMLのこともちょっとは分かっていないとできないところもあると思うので、</p>
<p>良かったらHTMLやCSSのUdemyの動画も使って勉強してみて下さい。</p>
<a href="https://t.felmat.net/fmcl?ak=Y4657Q.1.B846161.O69525F" target="_blank" rel="nofollow noopener"><img loading="lazy" decoding="async" class="aligncenter" src="https://t.felmat.net/fmimg/Y4657Q.B846161.O69525F" alt="" width="600" height="80" border="0" /></a>
<div class="concept-box5">
<p><a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fclick.linksynergy.com%2Fdeeplink%3Fid%3D9v%2A%2FTGPvI90%26mid%3D47984%26murl%3Dhttps%253A%252F%252Fwww.udemy.com%252Fcourse%252Fhtml-css-js%252F" target="new" rel="noopener">ちゃんと学ぶ、HTML/CSS + JavaScript</a></p>
<p><a href="https://click.linksynergy.com/deeplink?id=9v*/TGPvI90&amp;mid=47984&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fpython-beginner%2F" target="new" rel="noopener">現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル</a></p>
</div>
<a href="https://loosecarrot.com/2020/12/05/4556/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/12/プログラミングは「向き・不向き」を気にしなくてもいい-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングに無理はない「向き・不向き」でなく「慣れ」</span><span class="blog-card-excerpt">

「プログラミングは論理的思考が必要だ」などと時々見ますが、あまり関係ないと私は感じています。

基本的には誰にでも仕事のレベ...</span></div></div></a>The post <a href="https://loosecarrot.com/2021/01/03/4775/">Django独学 WEBページをリンクでページ遷移させる</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2021/01/03/4775/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4775</post-id>	</item>
	</channel>
</rss>
