茨の道も一歩から

インフラ構築からプログラミング(Python・JavaScript)までITに関するブログです。

99日目:Pythonプログラミング

Pythonプログラミングの講義33日目です。

今日の講義は、自習。内職はDjangoアプリ制作

【講義内容】

  • 自習

【ワンポイント】

  • 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>

【今日の積み上げ】