質問: Django公式チュートリアルにおきまして、 「**テンプレート内のハードコードされたURLを削除**」こちらの項目部分で分からないことがございます。 ``` {{ question.question_text }} ``` 上記のコードを以下のように書き換える記載があるかと思います。 ``` {{ question.question_text }} ``` こちらで疑問なのですが、「 {% url 'detail' question.id %}」こちらで「detail」と指定していますが、チュートリアル記載の「polls/urls.py」ファイルでは「detail」ビューを表示するパスは`path('/', views.detail, name='detail'),`このようになっています。 こちらの記載では「/polls/」の部分が抜けているのですが、何故、上記2つのコードは等価と見なされるのでしょうか...? 勉強をしていてこちらの部分に関しまして、分からなくなってしまった為、どなたか教えて頂けましたら幸いです。
回答: ちょっと何が知りたいのかわからないのですけれども > > ビューとオプションの引数を指定して、これとマッチする絶対パスへの参照 ( ドメイン部分を除いた URL ) を返します。 > > > という機能を持っているからであり、なぜそのような機能をテンプレートが持っているのか、言い換えればなぜそのような機能が必要なのかといえば > > テンプレートタグの {%url%} を使用して、URL 設定で定義されている特定の URL パスへの依存をなくすことができます > > > と「特定の URL パスへの依存をなくすことができます」と書いてあると思います。 追記 `mysite/urls.py` で polls/ というパスと、モジュール polls.urls が結びついていますよね。 > > include() の背景にある考えは、 URL を簡単にプラグ & プレイ可能にすることです。 polls には独自の URLconf (polls/urls.py) を持っているので、 "/polls/" 、 "/fun_polls/" や、 "/content/polls/" といった、どんなパスルート下にも置けて、どこに置いてもきちんと動作します。 > > > 「URL を簡単にプラグ & プレイ可能にすることです」と書いてあります。 もし polls/ を書かなければならないなら**プラグ & プレイ可能になってない**ということですから。 追記 `mysite/urls.py` の `path('polls/', include('polls.urls')),` を `path('hogehoge/', include('polls.urls')),` とか変えたら、パッケージpollsの中のファイルは一切直さなくても http://127.0.0.1:8000/hogehoge/ でアプリケーションが動くようにDjangoは設計されています。 そうであるためには、テンプレート内の`{% url 'detail' question.id %}`の部分に polls/ が**登場してはいけない**わけです。