{"id":524,"date":"2021-04-29T15:36:04","date_gmt":"2021-04-29T06:36:04","guid":{"rendered":"http:\/\/www.agile-software.site\/?p=524"},"modified":"2021-05-03T09:10:34","modified_gmt":"2021-05-03T00:10:34","slug":"%e6%9b%b8%e7%b1%8d%e6%a4%9c%e7%b4%a2%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0","status":"publish","type":"post","link":"https:\/\/agile-software.net\/?p=524","title":{"rendered":"\u66f8\u7c4d\u691c\u7d22\u30b7\u30b9\u30c6\u30e0"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">API<\/h2>\n\n\n\nhttp:\/\/www.agile-software.site\/2021\/04\/29\/api\/\n\n\n\n<h2 class=\"wp-block-heading\">\u30c8\u30c3\u30d7\u30da\u30fc\u30b8\u306eURL\u3092\u4f5c\u6210<\/h2>\n\n\n\n<p>views.py\u306eIndexView\u306b\u6e21\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>from django.urls import path\nfrom app import views\n\nurlpatterns = [\n    path(&#39;&#39;, views.IndexView.as_view(), name=&#39;index&#39;),\n]<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u66f8\u7c4d\u691c\u7d22\u30d5\u30a9\u30fc\u30e0\u306e\u4f5c\u6210<\/h2>\n\n\n\n<p>title\u3092\u5165\u529b\u3067\u304d\u308b\u30d5\u30a9\u30fc\u30e0\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"app\/forms.py\"><code>from django import forms\n\nclass SearchForm(forms.Form):\n    title = forms.CharField(label=&#39;\u30bf\u30a4\u30c8\u30eb&#39;, max_length=200, required=True)<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">view\u306e\u4f5c\u6210<\/h2>\n\n\n\n<p>\u30d5\u30a9\u30fc\u30e0\u306e\u5185\u5bb9\u3092\u53d6\u5f97\u3057\u3001index.html\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u6e21\u3059\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\nhttp:\/\/www.agile-software.site\/2021\/04\/24\/django-render%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89\/\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>form = SearchForm(request.POST or None)<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"app\/views.py\"><code>from django.views.generic import View\nfrom django.shortcuts import render\nfrom .forms import SearchForm\n\n\nclass IndexView(View):\n    def get(self, request, *args, **kwargs):\n        form = SearchForm(request.POST or None)\n\n        return render(request, &#39;app\/index.html&#39;, {\n            &#39;form&#39;: form\n        })<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">base.html<\/h2>\n\n\n\n<p>\u3082\u3057\u30e6\u30fc\u30b6\u30fc\u304c\u30ed\u30b0\u30a4\u30f3\u72b6\u614b\u3067\u3042\u3063\u305f\u3089\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u3068\u30ed\u30b0\u30a2\u30a6\u30c8\u3092\u3001\u672a\u30ed\u30b0\u30a4\u30f3\u3067\u3042\u308c\u3070\u30b5\u30a4\u30f3\u30a2\u30c3\u30d7\u30dc\u30bf\u30f3\u3068\u30ed\u30b0\u30a4\u30f3\u3092\u8868\u793a\u3059\u308b<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>                {% if user.is_authenticated %}\n                    &lt;li class=&quot;nav-item&quot;&gt;\n                        &lt;a class=&quot;nav-link&quot; href=&quot;{% url &#39;profile&#39; %}&quot;&gt;\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb&lt;\/a&gt;\n                    &lt;\/li&gt;\n                    &lt;li class=&quot;nav-item&quot;&gt;\n                        &lt;a class=&quot;nav-link&quot; href=&quot;{% url &#39;account_logout&#39; %}&quot;&gt;\u30ed\u30b0\u30a2\u30a6\u30c8&lt;\/a&gt;\n                    &lt;\/li&gt;\n                {% else %}\n                    &lt;li class=&quot;nav-item&quot;&gt;\n                        &lt;a class=&quot;nav-link&quot; href=&quot;{% url &#39;account_signup&#39; %}&quot;&gt;\u30b5\u30a4\u30f3\u30a2\u30c3\u30d7&lt;\/a&gt;\n                    &lt;\/li&gt;\n                    &lt;li class=&quot;nav-item&quot;&gt;\n                        &lt;a class=&quot;nav-link&quot; href=&quot;{% url &#39;account_login&#39; %}&quot;&gt;\u30ed\u30b0\u30a4\u30f3&lt;\/a&gt;\n                    &lt;\/li&gt;\n                {% endif %}<\/code><\/pre><\/div>\n\n\n\n<p>javaScript<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>    {% block extra_js %}\n    {% endblock %}<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>{% load static %}\n\n&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;ja&quot;&gt;\n\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.4.1\/css\/bootstrap.min.css&quot;&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;{% static &#39;css\/style.css&#39; %}&quot;&gt;\n    &lt;title&gt;\u697d\u5929\u30d6\u30c3\u30af\u30b9\u66f8\u7c4dAPI\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb&lt;\/title&gt;\n&lt;\/head&gt;\n\n&lt;body&gt;\n    &lt;nav class=&quot;navbar navbar-expand-lg navbar-dark bg-dark&quot;&gt;\n        &lt;div class=&quot;container&quot;&gt;\n            &lt;a class=&quot;navbar-brand&quot; href=&quot;\/&quot;&gt;\u697d\u5929\u30d6\u30c3\u30af\u30b9\u66f8\u7c4dAPI&lt;\/a&gt;\n            &lt;ul class=&quot;navbar-nav ml-auto&quot;&gt;\n                &lt;li class=&quot;nav-item&quot;&gt;\n                    &lt;a class=&quot;nav-link&quot; href=&quot;\/&quot;&gt;\u30db\u30fc\u30e0&lt;\/a&gt;\n                &lt;\/li&gt;\n                {% if user.is_authenticated %}\n                    &lt;li class=&quot;nav-item&quot;&gt;\n                        &lt;a class=&quot;nav-link&quot; href=&quot;{% url &#39;profile&#39; %}&quot;&gt;\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb&lt;\/a&gt;\n                    &lt;\/li&gt;\n                    &lt;li class=&quot;nav-item&quot;&gt;\n                        &lt;a class=&quot;nav-link&quot; href=&quot;{% url &#39;account_logout&#39; %}&quot;&gt;\u30ed\u30b0\u30a2\u30a6\u30c8&lt;\/a&gt;\n                    &lt;\/li&gt;\n                {% else %}\n\n                {% endif %}\n            &lt;\/ul&gt;\n        &lt;\/div&gt;\n    &lt;\/nav&gt;\n\n    &lt;main&gt;\n        &lt;div class=&quot;container&quot;&gt;\n            {% block content %}\n            {% endblock %}\n        &lt;\/div&gt;   \n    &lt;\/main&gt;\n\n    &lt;footer class=&quot;py-2 bg-dark&quot;&gt;\n        &lt;p class=&quot;m-0 text-center text-white&quot;&gt;Copyright \u00a9 Django Startup 2020&lt;\/p&gt;\n    &lt;\/footer&gt;\n\n    {% block extra_js %}\n    {% endblock %}\n&lt;\/body&gt;\n\n&lt;\/html&gt;<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">index.html<\/h2>\n\n\n\n<p><code>widget_tweaks<\/code>\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u5165\u529b\u6b04\u306b\u30c6\u30ad\u30b9\u30c8\u3092\u7528\u610f\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"252\" height=\"36\" src=\"http:\/\/www.agile-software.site\/wp-content\/uploads\/2021\/05\/placeholder.png\" alt=\"\" class=\"wp-image-692\"\/><\/figure>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"app\/templates\/app\/index.html\"><code>{% extends &quot;app\/base.html&quot; %}\n{% load widget_tweaks %}\n\n{% block content %}\n\n&lt;div class=&quot;text-center my-5&quot;&gt;\n    &lt;form method=&quot;post&quot;&gt;\n        {% csrf_token %}\n        &lt;div class=&quot;align-items-center&quot;&gt;\n            {% render_field form.title class=&quot;form-control&quot; placeholder=&quot;\u30ad\u30fc\u30ef\u30fc\u30c9\u304b\u3089\u63a2\u3059&quot; %}\n            &lt;button class=&quot;btn btn-primary mt-2&quot; type=&quot;submit&quot;&gt;\u691c\u7d22&lt;\/button&gt;    \n        &lt;\/div&gt;\n    &lt;\/form&gt;\n&lt;\/div&gt;\n\n{% endblock %}<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u691c\u7d22\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u66f8\u7c4d\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3055\u305b\u308b<\/h2>\n\n\n\n<p>json\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002json\u306b\u3064\u3044\u3066\u306f\u4e0b\u8a18\u8a18\u4e8b\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\nhttp:\/\/www.agile-software.site\/2021\/03\/31\/%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab\/\n\n\n\n<p><code>requests.get<\/code>\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001API\u304b\u3089\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>api = requests.get(SEARCH_URL, params=params).text<\/code><\/pre><\/div>\n\n\n\n<p><code>form.cleaned_data<\/code>\u3067\u30d5\u30a9\u30fc\u30e0\u306b\u5165\u529b\u3057\u305f\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b<\/p>\n\n\n\n<p>\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u8a2d\u5b9a\u3057\u305f\u30c7\u30fc\u30bf\u3092\u8868\u793a\u3057\u307e\u3059\u3002keyword\u5909\u6570\u306b\u306f\u5165\u529b\u3057\u305f\u6587\u5b57\u5217\u304c\u5165\u3063\u3066\u3044\u307e\u3059\u3002<br>hit\u6570\u309228\u306b\u3057\u3066\u3044\u308b\u306e\u3067\u753b\u9762\u306b\u306f28\u500b\u306e\u66f8\u7c4d\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>keyword = form.cleaned_data[&#39;title&#39;]<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"app\/views.py\"><code>from django.views.generic import View\nfrom django.shortcuts import render\nimport json\nimport requests\nfrom .forms import SearchForm\n\nSEARCH_URL = &#39;https:\/\/app.rakuten.co.jp\/services\/api\/BooksBook\/Search\/20170404?format=json&applicationId=1111111&#39; # ID\u5909\u66f4\n\n\ndef get_api_data(params):\n    api = requests.get(SEARCH_URL, params=params).text\n    result = json.loads(api)\n    items = result[&#39;Items&#39;]\n    return items\n\n\nclass IndexView(View):\n    def get(self, request, *args, **kwargs):\n        form = SearchForm(request.POST or None)\n\n        return render(request, &#39;app\/index.html&#39;, {\n            &#39;form&#39;: form\n        })\n\n    def post(self, request, *args, **kwargs):\n        form = SearchForm(request.POST or None)\n\n        if form.is_valid():\n            keyword = form.cleaned_data[&#39;title&#39;]\n            params = {\n                &#39;title&#39;: keyword,\n                &#39;hits&#39;: 28,\n            }\n            items = get_api_data(params)\n            book_data = []\n            for i in items:\n                item = i[&#39;Item&#39;]\n                title = item[&#39;title&#39;]\n                image = item[&#39;largeImageUrl&#39;]\n                isbn = item[&#39;isbn&#39;]\n                query = {\n                    &#39;title&#39;: title,\n                    &#39;image&#39;: image,\n                    &#39;isbn&#39;: isbn\n                }\n                book_data.append(query)\n\n            return render(request, &#39;app\/book.html&#39;, {\n                &#39;book_data&#39;: book_data,\n                &#39;keyword&#39;: keyword\n            })\n\n        return render(request, &#39;app\/index.html&#39;, {\n            &#39;form&#39;: &#39;form&#39;\n        })<\/code><\/pre><\/div>\n\n\n\n<p>index.html\u3067\u30d5\u30a9\u30fc\u30e0\u753b\u9762\u3092IndexView\u3068book.html\u3067\u691c\u7d22\u7d50\u679c\u306e\u753b\u9762\u3092\u8868\u793a\u3055\u305b\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"537\" src=\"http:\/\/www.agile-software.site\/wp-content\/uploads\/2021\/05\/index.html-1024x537.png\" alt=\"\" class=\"wp-image-698\" srcset=\"https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/index.html-1024x537.png 1024w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/index.html-300x157.png 300w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/index.html-768x403.png 768w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/index.html-1536x806.png 1536w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/index.html.png 1920w, http:\/\/www.agile-software.site\/wp-content\/uploads\/2021\/05\/index.html-1024x537.png 856w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>index.html<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"543\" src=\"http:\/\/www.agile-software.site\/wp-content\/uploads\/2021\/05\/book.html-1024x543.png\" alt=\"\" class=\"wp-image-699\" srcset=\"https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/book.html-1024x543.png 1024w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/book.html-300x159.png 300w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/book.html-768x407.png 768w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/book.html-1536x815.png 1536w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/book.html.png 1899w, http:\/\/www.agile-software.site\/wp-content\/uploads\/2021\/05\/book.html-1024x543.png 856w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>book.html<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">book.html<\/h2>\n\n\n\n<p>\u30d3\u30e5\u30fc\u304b\u3089\u6e21\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3092\u30eb\u30fc\u30d7\u3067\u56de\u3057\u3066\u8868\u793a\u3055\u305b\u307e\u3059\u3002<br>{{ book.title }}\u672c\u306e\u30bf\u30a4\u30c8\u30eb\u3092\u592a\u304f\u8868\u793a\u3055\u305b\u3066\u3044\u307e\u3059\u3002<br>&lt;a class=&#8221;stretched-link&#8221; href=&#8221;{% url &#8216;detail&#8217; book.isbn %}&#8221;>&lt;\/a>\u66f8\u7c4d\u3092\u30af\u30ea\u30c3\u30af\u3057\u305f\u3089\u3001\u8a73\u7d30\u753b\u9762\u306b\u9077\u79fb\u3059\u308b\u3088\u3046\u306b\u30ea\u30f3\u30af\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"app\/templates\/app\/book.html\"><code>{% extends &quot;app\/base.html&quot; %}\n\n{% block content %}\n\n&lt;div class=&quot;text-center my-5&quot;&gt;\n    &lt;div class=&quot;mb-5&quot;&gt;\n        &lt;h3&gt;\u300c{{ keyword }}\u300d\u306e\u691c\u7d22\u7d50\u679c&lt;\/h3&gt;\n    &lt;\/div&gt;\n    &lt;div class=&quot;row&quot;&gt;\n        {% for book in book_data %}\n            &lt;div class=&quot;col-3 mb-3&quot;&gt;\n                &lt;div class=&quot;card img-thumbnail booklist h-100&quot;&gt;\n                    &lt;img class=&quot;card-img-top card-thum&quot; src=&quot;{{ book.image }}&quot; alt=&quot;&quot;&gt;\n                    &lt;div class=&quot;card-body text-center px-2 py-3&quot;&gt;\n                        &lt;h5 class=&quot;font-weight-bold&quot;&gt;{{ book.title }}&lt;\/h5&gt;\n                    &lt;\/div&gt;\n                    &lt;a class=&quot;stretched-link&quot; href=&quot;&quot;&gt;&lt;\/a&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        {% empty %}\n            &lt;p&gt;\u8a72\u5f53\u3059\u308b\u3082\u306e\u306f\u3042\u308a\u307e\u305b\u3093&lt;\/p&gt;\n        {% endfor %}\n    &lt;\/div&gt;\n&lt;\/div&gt;\n\n{% endblock %}\n<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u66f8\u7c4d\u306e\u8a73\u7d30\u3092\u8868\u793a\u3055\u305b\u307e\u3059\u3002<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>from django.urls import path\nfrom app import views\n\nurlpatterns = [\n    path(&#39;&#39;, views.IndexView.as_view(), name=&#39;index&#39;),\n    path(&#39;detail\/&lt;str:isbn&gt;&#39;, views.DetailView.as_view(), name=&#39;detail&#39;), # \u8ffd\u52a0\n]<\/code><\/pre><\/div>\n\n\n\n<p>\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5f15\u6570\u3068\u3057\u3066API\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u8868\u793a\u306b\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u3066\u3001\u5404\u5909\u6570\u306b\u683c\u7d0d\u3057\u3066\u3044\u304d\u307e\u3059<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"app\/views.py\"><code>class DetailView(View):\n    def get(self, request, *args, **kwargs):\n        isbn = self.kwargs[&#39;isbn&#39;]\n        params = {\n            &#39;isbn&#39;: isbn\n        }\n\n        items = get_api_data(params)\n        items = items[0]\n        item = items[&#39;Item&#39;]\n        title = item[&#39;title&#39;]\n        image = item[&#39;largeImageUrl&#39;]\n        author = item[&#39;author&#39;]\n        itemPrice = item[&#39;itemPrice&#39;]\n        salesDate = item[&#39;salesDate&#39;]\n        publisherName = item[&#39;publisherName&#39;]\n        size = item[&#39;size&#39;]\n        isbn = item[&#39;isbn&#39;]\n        itemCaption = item[&#39;itemCaption&#39;]\n        itemUrl = item[&#39;itemUrl&#39;]\n        reviewAverage = item[&#39;reviewAverage&#39;]\n        reviewCount = item[&#39;reviewCount&#39;]\n\n        book_data = {\n            &#39;title&#39;: title,\n            &#39;image&#39;: image,\n            &#39;author&#39;: author,\n            &#39;itemPrice&#39;: itemPrice,\n            &#39;salesDate&#39;: salesDate,\n            &#39;publisherName&#39;: publisherName,\n            &#39;size&#39;: size,\n            &#39;isbn&#39;: isbn,\n            &#39;itemCaption&#39;: itemCaption,\n            &#39;itemUrl&#39;: itemUrl,\n            &#39;reviewAverage&#39;: reviewAverage,\n            &#39;reviewCount&#39;: reviewCount,\n            &#39;average&#39;: float(reviewAverage) * 20,\n        }\n\n        return render(request, &#39;app\/detail.html&#39;, {\n            &#39;book_data&#39;: book_data\n        })<\/code><\/pre><\/div>\n\n\n\n<p>DetailView\u3068detail.html\u3067\u8a73\u7d30\u753b\u9762\u3092\u8868\u793a\u3055\u305b\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>isbn\u3068\u306f\u66f8\u7c4d\u3092\u4e16\u754c\u5171\u901a\u3067\u7279\u5b9a\u3059\u308b\u305f\u3081\u306e\u756a\u53f7\u3067\u3001\u73fe\u5728\u3001ISBN\u306f\u8a0813\u6841\u306e\u756a\u53f7\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br>\u70b9\u6570\u304c\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3067\u30d3\u30e5\u30fc\u304b\u3089\u3082\u3089\u3048\u308b\u306e\u3067\u3001<code>width<\/code>\u3092\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3067\u6307\u5b9a\u3059\u308b\u3068\u3001\u8996\u899a\u7684\u306b\u5206\u304b\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"537\" src=\"http:\/\/www.agile-software.site\/wp-content\/uploads\/2021\/05\/detail.html-1024x537.png\" alt=\"\" class=\"wp-image-700\" srcset=\"https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/detail.html-1024x537.png 1024w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/detail.html-300x157.png 300w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/detail.html-768x403.png 768w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/detail.html-1536x806.png 1536w, https:\/\/agile-software.net\/wp-content\/uploads\/2021\/05\/detail.html.png 1920w, http:\/\/www.agile-software.site\/wp-content\/uploads\/2021\/05\/detail.html-1024x537.png 856w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"app\/templates\/app\/detail.html\"><code>{% extends &quot;app\/base.html&quot; %}\n\n{% block content %}\n\n&lt;div class=&quot;my-5&quot;&gt;\n    &lt;div class=&quot;row&quot;&gt;\n        &lt;div class=&quot;col-md-6 text-center&quot;&gt;\n            &lt;img src=&quot;{{ book_data.image }}&quot; class=&quot;img-fluid&quot; alt=&quot;&quot;&gt;\n        &lt;\/div&gt;\n\n        &lt;div class=&quot;col-md-6&quot;&gt;\n            &lt;div class=&quot;card&quot;&gt;\n                &lt;div class=&quot;card-body px-2 py-1&quot;&gt;\n                    &lt;div class=&quot;p-4&quot;&gt;\n                        &lt;h3&gt;{{ book_data.title }}&lt;\/h3&gt;\n                        &lt;p class=&quot;mb-3&quot;&gt;{{ book_data.author }}&lt;\/p&gt;\n                        &lt;hr&gt;\n                        {% if not book_data.reviewCount == 0 %}\n                        &lt;div class=&quot;d-flex flex-row&quot;&gt;\n                            &lt;div class=&quot;star-rating&quot;&gt;\n                                &lt;div class=&quot;star-rating-front text-warning&quot; style=&quot;width: {{ book_data.average }}%&quot;&gt;\u2605\u2605\u2605\u2605\u2605&lt;\/div&gt;\n                                &lt;div class=&quot;star-rating-back&quot;&gt;\u2605\u2605\u2605\u2605\u2605&lt;\/div&gt;\n                            &lt;\/div&gt;\n                            &lt;div class=&quot;average ml-2 text-danger&quot;&gt;\n                                {{ book_data.reviewAverage|floatformat:2 }}\n                            &lt;\/div&gt;\n                            &lt;div class=&quot;d-flex align-items-center ml-2&quot;&gt;\n                                {{ book_data.reviewCount }}\u4ef6\n                            &lt;\/div&gt;\n                        &lt;\/div&gt;\n                        {% else %}\n                            &lt;p&gt;\u307e\u3060\u30ec\u30d3\u30e5\u30fc\u306f\u3042\u308a\u307e\u305b\u3093\u3002&lt;\/p&gt;\n                        {% endif %}\n                        &lt;p class=&quot;mt-3&quot;&gt;\u4fa1\u683c\uff1a&lt;span class=&quot;text-danger font-weight-bold h3&quot;&gt;{{ book_data.itemPrice }}\u5186&lt;\/span&gt;&lt;\/p&gt;\n                        &lt;a class=&quot;btn btn-primary&quot; href=&quot;{{ book_data.itemUrl }}&quot;&gt;\u8cb7\u3044\u7269\u304b\u3054\u306b\u5165\u308c\u308b&lt;\/a&gt;\n                    &lt;\/div&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n\n    {% if book_data.itemCaption %}\n        &lt;div class=&quot;mb-5&quot;&gt;\n            &lt;h5&gt;\u5546\u54c1\u8aac\u660e&lt;\/h5&gt;\n            &lt;hr&gt;\n            &lt;p&gt;{{ book_data.itemCaption }}&lt;\/p&gt;    \n        &lt;\/div&gt;\n    {% endif %}\n\n    &lt;div class=&quot;mb-5&quot;&gt;\n        &lt;h5&gt;\u5546\u54c1\u60c5\u5831&lt;\/h5&gt;\n        &lt;hr&gt;\n        &lt;p&gt;\u767a\u58f2\u65e5\uff1a{{ book_data.salesDate }}&lt;\/p&gt;\n        &lt;p&gt;\u8457\u8005\/\u7de8\u96c6\uff1a{{ book_data.author }}&lt;\/p&gt;\n        &lt;p&gt;\u51fa\u7248\u793e\uff1a{{ book_data.publisherName }}&lt;\/p&gt;\n        &lt;p&gt;\u767a\u884c\u5f62\u614b\uff1a{{ book_data.size }}&lt;\/p&gt;\n        &lt;p&gt;ISBN\u30b3\u30fc\u30c9\uff1a{{ book_data.isbn }}&lt;\/p&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n\n{% endblock %}<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">CSS<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"app\/static\/css\/style.css\"><code>\/* detail *\/\n\n.star-rating {\n\tposition: relative;\n\tfont-size: 20px;\n\tword-wrap: normal !important;\n}\n\n.star-rating-front {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\toverflow: hidden;\n}\n\n.star-rating-back {\n\tcolor: #ccc;\n}\n\n.average {\n\tfont-size: 20px;\n\tfont-weight: bold;\n}<\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>API \u30c8\u30c3\u30d7\u30da\u30fc\u30b8\u306eURL\u3092\u4f5c\u6210 views.py\u306eIndexView\u306b\u6e21\u3057\u307e\u3059\u3002 \u66f8\u7c4d\u691c\u7d22\u30d5\u30a9\u30fc\u30e0\u306e\u4f5c\u6210 title\u3092\u5165\u529b\u3067\u304d\u308b\u30d5\u30a9\u30fc\u30e0\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 view\u306e\u4f5c\u6210 \u30d5\u30a9\u30fc\u30e0\u306e\u5185\u5bb9\u3092\u53d6\u5f97\u3057\u3001index.html\u30c6\u30f3<\/p>\n","protected":false},"author":1,"featured_media":585,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jin_ogp_image_url":"","_jin_last_featured_id":0,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-524","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-django"],"_links":{"self":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=524"}],"version-history":[{"count":7,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/524\/revisions"}],"predecessor-version":[{"id":701,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/524\/revisions\/701"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/media\/585"}],"wp:attachment":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}