diadia

興味があることをやってみる。自分のメモを残しておきます。

slugを使って詳細ページurlの変更

urlを任意に変更する方法はどうすればよいのか?
urls.py ではurlpatterns = [ path("blog/", BlogDetailView) ,...] の方式でurlを設定しているけれども、'bog/任意の文字列' という形で決めたい場合どうすればいいのか?

参考url
【django2.0】便利なパスコンバータのご紹介

用語集 | Django documentation | Django



前提条件
urls.py

urlpatterns = [ path("blog/<int:pk>", BlogDetailView) ,...]

models.py

class Blog(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    private = models.BooleanField(default=True)

________________________________________________________________________________
解決案
概要:modelのBlogにslugを加える。加えたらurls.pyのpathを書き変える。

models.py

class Blog(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    private = models.BooleanField(default=True)
#前提コードから下記一文を追加する
    slug = models.SlugField(default="default")
$ python manage.py makemigrations 
$ python manage.py migrate

adminページから特別なurlにしたい要素を選び、slug欄を何かに変更する。
今回はspecial とする。

urls.py

#<int:pk> から<slug>に変更する
urlpatterns = [ path("blog/<slug>", BlogDetailView) ,...]

これでlocalhost:8000/blog/special と入力すると選んだページが表示され、好きなurlに変更できた。