Django テンプレート 使用 #4 URL

 

{{DZ_TITLE}}

DjangoのURLの定義の仕方と、テンプレートでの使い方です。

今回の話のベースは以下の資料を実施した直後という前提で書きます。

Django テンプレート 使用 #1
Django テンプレート 使用 #1

URLを事前に定義

今回、文字列と数値を付加できるURLを定義してみようと思います。 一例としてURLはテンプレート上で {% url ‘polls:test_url’ ‘String’ 4649 %} のように定義できます。
http://localhost:9999/polls/(文字列)/(数字)/ の様な感じです。

結果表示のテンプレート作成

polls\templates\polls\test_url.html

test_str : {{ test_str }}<br>
test_int : {{ test_int }}<br>

views.pyの修正

polls\views.py

from django.http import HttpResponse
from django.template import loader

def index(request):
    template = loader.get_template('polls/index.html')
    context = {
    }
    return HttpResponse(template.render(context, request))

def test_url(request,test_str,test_int):
    template = loader.get_template('polls/test_url.html')
    context = {
        'test_str':test_str,
        'test_int':test_int
    }
    return HttpResponse(template.render(context, request))

test_url を 追加しました。
パラメータとして、文字列 test_str、整数 test_intを受け取る様に定義しておきました。

URL 定義

polls\urls.py

from django.urls import path

from . import views

app_name = 'polls'
urlpatterns = [
    path('<str:test_str>/<int:test_int>/', views.test_url, name='test_url'),
    path('', views.index, name='index'),
]
  • URLの中に<str:変数名>や<int:変数名>のようにパラメータを入れる場所を定義できます。
  • 第2引数は関数名です。Viewsで定義した関数名を記載してください。
  • app_name = ‘polls’ 部分は、ネームスペースと呼ばれ、複数アプリケーションを作成したときに、同名のURLを区別するために使います。
    ネームスペースなしもできますが、つけておくことをお勧めします。
    作成したアプリケーションの名前に合わせることをお勧めします。今回は以下のようにpollsというアプリケーションを作成した前提です。
python manage.py startapp polls

URLのテンプレートを使う

以下のようにURLを使えます。

{% url 'polls:test_url' 'String' 4649 %}

実際に使ってみる。
polls\templates\polls\index.html

<b>Hello world</b><p>

<a href="{% url 'polls:test_url' 'String' 4649 %}">{% url 'polls:test_url' 'String' 4649 %}</a>

結果

Hello world
/polls/String/4649/

URLをクリックすると以下のように結果を表示できます。

test_str : String
test_int : 4649

あえてネームスペース無しで使ってみる (私的に非推奨)

私としては、ネームスペースは必須で使った方が良いと思いますが、あえて使わない方法も説明します。

URL定義の修正

polls\urls.py (修正前)

from django.urls import path

from . import views

app_name = 'polls'
urlpatterns = [
    path('<str:test_str>/<int:test_int>/', views.test_url, name='test_url'),
    path('', views.index, name='index'),
]

上記の polls\urls.py を app_name = ‘polls’ を削除すると、ネームスペースなしでの運用となります。

polls\urls.py (修正後)

from django.urls import path

from . import views

urlpatterns = [
    path('<str:test_str>/<int:test_int>/', views.test_url, name='test_url'),
    path('', views.index, name='index'),
]

URLを使う側の修正

polls\templates\polls\index.html (修正前)

<b>Hello world</b><p>

<a href="{% url 'polls:test_url' 'String' 4649 %}">{% url 'polls:test_url' 'String' 4649 %}</a>

{% url ‘polls:test_url’ ‘String’ 4649 %} の様なURL定義の polls: がネームスペース部分です。
この polls: を消して {% url ‘test_url’ ‘String’ 4649 %} のように定義します。

polls\templates\polls\index.html (修正後)

<b>Hello world</b><p>

<a href="{% url 'test_url' 'String' 4649 %}">{% url 'polls:test_url' 'String' 4649 %}</a>

関連記事

Django 目次- Python
Django 目次 - Python

おすすめ記事

Django テンプレート 使用 #2 Staticファイルの使用
Django テンプレート 使用 #2 Staticファイルの使用
Django Ajaxで非同期通信
Django Ajaxで非同期通信
Django チーター#1 - Python
Django チーター#1 - Python
Django Adminのパスワードを忘れたら? - Python
Django Adminのパスワードを忘れたら? - Python
Django 目次 - Python
Django 目次 - Python
SEO対策として、セキュリティー対策ソフトでチェック
SEO対策として、セキュリティー対策ソフトでチェック
Supponsered

外部サイト ↓プログラムを学んでみたい場合、学習コースなどもおすすめです!

Title : Photo by Steve Johnson on Unsplash

Comments

comments powered by Disqus