URLsの書き方
DjangoではURLにView関数を登録する時、 path(...), または re_path(...), という形で登録します。
path('', catalogue.views.product_list, name='product_list') の場合、各引数の意味は以下のようになります

'': 第1引数は文字列か正規表現です。この文字列(pathを利用)か、正規表現がマッチするURLの場合にView関数が呼び出されます
今回はからの文字列を指定しているので、トップ画面(http://example.com/ など)になります

catalogue.views.product_list: 呼び出されるView関数を指定します
今回作った product_list View関数を登録しています
単に関数を指定すれば良いので from catalogue.views import product_list とインポートした場合は第2引数に product_list と渡します
name='product_list': このURLに 'product_list' という名前を指定しています
今は特に必要ないですが、後ほど「商品一覧画面のリンクを取得したい」という場合に、この名前を使って取得します
詳しくは URLディスパッチャーのドキュメント を参照してください。

 

 

 

 

urlsのnameの使い方



`name="product_detail"`で指定されるURLの名前は、Djangoのテンプレートだけでなく、ビュー(views)内でも使用することができます。この名前付きURLの利点は、URLのパスを直接記述する代わりに、URLの名前を指定することで、Djangoが適切なURLパスを自動的に解決してくれることにあります。これにより、URLパスが変更された場合でも、名前を使用している全ての箇所で自動的に反映されるため、コードのメンテナンスが容易になります。

### テンプレートでの使用例

テンプレート内で、`{% url %}`テンプレートタグを使用して、名前付きURLを参照します。例えば、製品の詳細ページへのリンクを作成する場合、以下のように記述できます。

```html
<a href="{% url 'product_detail' product.id %}">{{ product.name }}</a>
```

ここでは、`'product_detail'`という名前を使って、対応するURLパスを動的に生成しています。`product.id`は、その製品のIDを指定して、詳細ページへの正確なリンクを作成します。

### ビューでの使用例

ビュー(views)内でも、`reverse()`関数または`redirect()`関数とともにURLの名前を使用して、URLを解決することができます。

- `reverse()`を使用してURLを解決する例:

```python
from django.urls import reverse

def my_view(request):
    # URLを動的に生成
    detail_url = reverse('product_detail', args=[product_id])
    # その他の処理...
```

- `redirect()`を使用して、特定のURLにリダイレクトする例:

```python
from django.shortcuts import redirect

def my_redirect_view(request):
    # 名前付きURLを使用してリダイレクト
    return redirect('product_detail', product_id=product_id)
```

このように、URLの名前をテンプレートとビューの両方で活用することで、Djangoアプリケーションの柔軟性とメンテナンス性を向上させることができます。URLの構造が変わっても、名前付きURLを使っていれば、対応する箇所を一つ一つ修正する手間が省けます。