Pythonプログラミングの講義33日目です。
【講義内容】
- 自習
【ワンポイント】
- Djangoで以下のエラーが発生してHTMLが表示されなかった。
Error message
NoReverseMatch at /urltest/ Reverse for 'article' not found. 'article' is not a valid view function or pattern name. Request Method: GET Request URL: http://localhost:8000/urltest/ Django Version: 3.1
- {% url xxx %}について、トライ&エラーしながら理解を深めた。
Django url
- namespace:name
app | app_name | urls | template | href |
---|---|---|---|---|
portfolio | - | name='index' | {% url 'index' %} | / |
urltest | urltest | name='index' | {% url 'urltest:index' %} | urltest/ |
hello | - | name='index' | {% url 'index' %} | hello/ |
blog | blog | name='index' | {% url 'blog:index' %} | blog/ |
namespaceなし
{% url 'index' %}
- settings.pyを読み込み
- ROOT_URLCONF = 'project_name.urls'
- project_name\urls.pyを参照
- urlpatternsの上から順に探索
- portfolio
- hello
- 一番最後にマッチしたものが反映される
- hello/
project_name\urls.py
urlpatterns = [ path('', include('portfolio.urls')), # app_nameなし path('urltest/', include('urltest.urls')), # app_name='urltest' path('hello/', include('hello.urls')), # app_nameなし path('blog/', include('blog.urls')), # app_name='blog' path('admin/', admin.site.urls), ]
urls.py
app_name = 'urltest' urlpatterns = [ path('', views.index, name='index'), path('articles/', views.articles, name='articles'), path('articles/<int:id>/', views.article, name='article'), ]
index.html
<a href="{% url 'index' %}">HOME</a>
namespaceあり
- プロジェクト名\urls.pyを参照
- urlpatternsの上から順に探索
- app_nameを比較
- マッチしたものが反映される
- urltest/
<a href="{% url 'urltest:index' %}">HOME</a>
【今日の積み上げ】
- Pythonの基礎