顧客IDをurlのパスに設定して、顧客詳細ページや顧客編集ページを表示させたい。
e.g. http:*/client/detail/${clientId}
### urls.py、views.pyを修正する
/sales/urls.py
urlpatterns = [ // 省略 path('client/detail/<int:id>', views.client_detail, name='client_detail'), // 省略 ]
/sales/views.py
def client_detail(request, id): client = Clients.objects.get(id=id) params = { 'client' : client } return render(request, 'sales/client_detail.html', params)
/templates/sales/client_detail.html
// 省略 {% block title %}{{client.name}} | hanbai - 得意先詳細:{{client.name}}の詳細を表示しています{% endblock %} // 省略 <table class="table"> <tr> <td class="bg">会社名</td> <td>{{client.name}}</td> <td class="bg">会社名カナ</td> <td>{{client.name_kana}}</td> </tr> <tr> <td class="bg">事業所名</td> <td>{{client.office}}</td> <td class="bg">部署</td> <td>{{client.department}}</td> </tr> <tr> <td class="bg">担当者名</td> <td>{{client.charge}}</td> <td class="bg">役職</td> <td>{{client.position}}</td> </tr> <tr> <td class="bg">メールアドレス</td> <td colspan="3">{{client.charge_mail}}</td> </tr> <tr> <td class="bg">住所</td> <td colspan="3">{{client.zipcode}} {{client.prefecture}}{{client.address}}</td> </tr> <tr> <td class="bg">電話</td> <td>{{client.tel}}</td> <td class="bg">FAX</td> <td>{{client.fax}}</td> </tr> <tr> <td class="bg">代表者</td> <td>{{client.name_top}}</td> <td class="bg">役職</td> <td>{{client.position_top}}</td> </tr> <tr> <td class="bg">備考</td> <td colspan="3">{{client.remark}}</td> </tr> </table> // 省略
idを引数に上手く表示されています。
ただし、引数のidがレコードにないと、”Clients matching query does not exist.”と表示されてしまう。
### try & except
以下のように書けば、レコードがない場合、一覧ページに表示されます。
def client_detail(request, id): try: client = Clients.objects.get(id=id) params = { 'client' : client } return render(request, 'sales/client_detail.html', params) except Clients.DoesNotExist: data = Clients.objects.all() params = { 'data' : data } return render(request, 'sales/client.html', params)
クライアント一覧ページのリンクを以下のように修正して結合テストを行えばOK。
<button class="btn btn-light" onclick="location.href='/client/detail/{{item.id}}'">詳細</button>
ページング以外でGetパラメータを使用するのは抵抗がありますね。