<!– templates/tools/trend_search.html –> {% extends “tools/base.html” %} {% load static %} {% load humanize %} {% block title %}楽天価格調査{% endblock %} {% block content %} <h2>楽天価格調査</h2> <p class=”text-muted mb-3″>CSVの1列目に入力した列のデータを取得して、現時点の価格を調査します。</p> <p> <ul> <li>※日本語データがうまく読み込まれない場合があります。<a href=”{% url ‘tools:conversion_character_code’ %}”>CSV文字コード変換ツール</a>で文字コードをUTF-8に変換してから再度アップロードしてください。</li> <li><a href=”{% static ‘./’ %}”>テンプレートファイルはこちら</a></li> <li><a href=”{%url ‘tools:rakuten_genre_id’%}”>楽天ジャンルIDはこちら</a></li> <li><a href=”{%url ‘tools:rakuten_tag_id’%}”>楽天タグIDはこちら</a></li> <li>※サムネイル画像が表示されない場合「Shift+F5」を押して下さい。</li> <li>※○:検索キーワード、ジャンルID、商品コード、ショップコードのいずれかが指定されていることが必須です。</li> </ul> </p> <style> .center-button { text-align: center; } .center-button button { display: inline-block; } </style> <form method=”post” action=”” enctype=”multipart/form-data”> {% csrf_token %} <div class=”row”> {% for parameter in parameters|slice:”:6″ %} <div class=”col-md-4″> <div class=”mb-3″> <label for=”{{ parameter.label }}” class=”form-label”>{{ parameter.label }}</label> {% with parameter_value=request.POST.get(parameter.name) %} <input type=”text” class=”form-control” id=”{{ parameter.name }}” name=”{{ parameter.name }}” value=”{% if parameter_value %}{{ parameter_value }}{% endif %}”> {% endwith %} </div> </div> {% if forloop.counter|divisibleby:3 and not forloop.last %} </div> <div class=”row”> {% endif %} {% endfor %} </div> <!– アコーディオン –> <div id=”accordion” class=”row”> <div class=”card”> <div class=”card-header” id=”headingOne”> <h5 class=”mb-0″> <button class=”btn btn-link” type=”button” data-bs-toggle=”collapse” data-bs-target=”#collapseOne” aria-expanded=”true” aria-controls=”collapseOne”> 追加の入力項目を表示 </button> </h5> </div> <div id=”collapseOne” class=”collapse” aria-labelledby=”headingOne” data-bs-parent=”#accordion”> <div class=”card-body row”> {% for parameter in parameters|slice:”6:” %} <div class=”col-md-4″> <div class=”mb-3″> <label for=”{{ parameter.label }}” class=”form-label”>{{ parameter.label }}</label> <input type=”text” class=”form-control” id=”{{ parameter.name }}” name=”{{ parameter.name }}” value=”{{ request.POST.parameter.name }}”> </div> </div> {% endfor %} </div> </div> </div> </div> <!– フォームの送信 –> <button type=”submit” class=”btn btn-primary” style=”height: 60px;”>調査開始</button> </form> {% if csv_path %} <p class=”text-center”><a href=” {% static ‘./’ %}{{ csv_path }}” download class=”btn btn-success” style=”margin:auto”>CSVダウンロード</a></p> {% endif %} <!– <div class=”container mt-5″> –> <table class=”table table-bordered ti_mt-30″> <thead class=”thead-light”> <tr> <th>店舗名<br><i>ショップコード</i></th> <th>ジャンルID</th> <th>タグID</th> <th>商品名</th> <th>販売価格</th> <th>商品リンク</th> <th>サムネ画像</th> </tr> </thead> <tbody> {% for item in items %} <tr> <td>{{ item.shopName }}<br><br> <p><i>{{item.shopCode}}</i></p> </td> <td>{{item.genreId}}</td> <td>{{item.tagIds}}</td> <td>{{ item.itemName }}</td> <td style=”text-align: right;”>{{ item.itemPrice| intcomma }}</td> <td style=” text-align: center;”><a href=”{{ item.itemUrl }}” target=”_blank” class=”btn btn-danger btn-sm”><u>楽天</u></a></td> <td style=”text-align: center;”><img src=”{{ item.smallImage1 }}” alt=”{{ item.item_name }}”></td> </tr> {% endfor %} </tbody> </table> <!– </div> –> {% if items %} {% endif %} {% endblock %}
ありがとうございます。提供いただいたコードを確認しました。以下はいくつかの改善点です:
- フォームの修正: フォーム内の
input要素において、value属性を適切に設定するための修正が必要です。下記のように変更してください。
html
<input type="text" class="form-control" id="{{ parameter.name }}" name="{{ parameter.name }}" value="{% if request.POST.parameter and parameter in request.POST.parameter %}{{ request.POST.parameter|get_item:parameter }}{% endif %}">
これにより、request.POST.parameter内に該当のparameterが存在している場合にその値を表示します。また、get_itemフィルターを使用して、辞書から値を取得しています。
- アコーディオン内の
input要素の修正: アコーディオン内のinput要素も同様に修正が必要です。
html
<input type="text" class="form-control" id="{{ parameter.name }}" name="{{ parameter.name }}" value="{% if request.POST.parameter and parameter in request.POST.parameter %}{{ request.POST.parameter|get_item:parameter }}{% endif %}">
これにより、アコーディオン内でも正しくvalueが表示されるようになります。
parameterのname属性に基づく辞書の値取得:parameterのname属性に基づいて辞書から値を取得するため、get_itemフィルターを以下のように追加してください。
python
# filters.py from django import template register = template.Library() @register.filter def get_item(dictionary, key): return dictionary.get(key, None)
これにより、request.POST.parameter内でparameter.nameに基づいて値を取得できるようになります。 filters.pyはアプリのどこかに作成し、テンプレートで {% load filters %} として読み込んでください。
これらの変更が問題を解決するか確認してみてください。

ディスカッション
コメント一覧
まだ、コメントがありません