Django: Reverse for 'name' not found
DjangoでURL逆引きに失敗した際のエラー原因と解決策
概要
DjangoでURL名を使った逆引きが失敗した際に発生するエラーです。
エラーメッセージ
``` django.urls.exceptions.NoReverseMatch: Reverse for ‘user_detail’ not found. ‘user_detail’ is not a valid view function or pattern name. ```
原因
- URL名の不一致: name引数の誤り
- app_name の未設定: 名前空間が必要
- 引数の不足: 必要なパラメータが渡されていない
- urls.py の読み込み忘れ: include()の欠落
解決策
1. URL定義を確認
```python
urls.py
from django.urls import path from . import views
app_name = ‘users’ # 名前空間
urlpatterns = [ path(’’, views.user_list, name=‘user_list’), path(’int:pk/’, views.user_detail, name=‘user_detail’), ] ```
2. 正しいURL逆引き
```python from django.urls import reverse
名前空間あり
url = reverse(‘users:user_detail’, kwargs={‘pk’: 1})
名前空間なし
url = reverse(‘user_detail’, args=[1]) ```
3. テンプレートでの使用
```html
詳細
次へ ```
4. プロジェクトのurls.pyを確認
```python
project/urls.py
from django.urls import path, include
urlpatterns = [ path(‘users/’, include(‘users.urls’, namespace=‘users’)), ] ```
5. デバッグ方法
```python
manage.py shell
from django.urls import get_resolver
登録されたURLを確認
resolver = get_resolver() for pattern in resolver.url_patterns: print(pattern) ```
よくある間違い
- app_name と namespace の両方を指定しない
- 引数の名前(pk vs id)の不一致
- URLパターンの正規表現エラー
関連エラー
関連エラー
Python の他のエラー
この記事は役に立ちましたか?