3
0

More than 1 year has passed since last update.

djangoでの動的urlの取り扱いについてまとめてみた

Posted at

本日のお題

今回はdjangoアプリでの動的urlの取り扱いについてまとめます。

動的urlとは、その時々の状況によってurlの一部もしくは全体が変化するようなもののことです。

viewsにパラメータを渡すためにurlの一部にレコードのidを混ぜ込む場合などが代表例ですね。

今回は例として/myapp/delete/xx(xxにはレコードのidが入る)というurlを動的に作成し、そこにリクエストを送ることでそのレコードが削除されるようにしてみたいと思います。

目次

  • urls.pyの編集
  • views.pyの編集
  • テンプレートの編集

urls.pyの編集

動的urlを使ってレコードを削除するために編集する必要があるのは、urls.py、views.py、テンプレートの三箇所です。

まずはurls.pyを編集し、delete/xxへのリクエストでレコード削除の関数が呼び出されるようにします。

urls.py
urlpatterns = [
  path("delete/<int:pk>/", views.myapp_delelte, name="myapp_delete")
]

int:pkがパラメータを埋め込む部分になります。
<パラメータの型:パラメータ名>のように記述します。

パラメータ名に関してはなんでも良いのですが、このあとviewsで同じ名前を使うのでpk(primary key)やidのようにわかりやすいものが良いと思います。

次に、このパラメータを用いてレコードを削除していきます。

views.pyの編集

views.pyを以下のように編集します。

views.py
def myapp_delete(request, pk):
  Post.objects.filter(id=pk).delete()
  return render(request, "myapp/index.html")

requestに加えて、先程指定したpkを引数としているところに注意してください。
他は特に問題ないかと思います。

最後に、このdelete/xxへのリンクをテンプレート上に作成します。

テンプレートの編集

テンプレート上では以下のように書くことで、動的なurlを作成することができます。

<!-- aタグを用いる場合 -->
<a href="{% url 'myapp:myapp_delete' post.id %}">

<!-- formタグを用いる場合 -->
<form method="post" action="{% url 'myapp:myapp_delete' post.id %}">
{% csrf %}
<button type="submit">削除</button>
</form>

要はhref属性の値の中にパラメータも入れてしまえば良いということですね。

終わりに

以上で動的なurlの作成方法については終了です。

パラメータの型についてはint以外でも指定できるみたいですが、そちらについては機会があればまとめます。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0