###やりたいこと
Djangoでリンクをクリックし、遷移するときに現在はURLが「blog/1」というようにPrimaryKeyで渡されているのですが、
文字列(Post.title)を渡し「blog/Title1」というようにしたいです。
###エラー文
ValueError: invalid literal for int() with base 10: 'Title1'
###やったこと
調べてみると、viewsで
slug_fieldでモデルのフィールドの名前、
slug_url_kwargにurlsのキーワードの名前を指定、
HTMLでaタグを変えれば(下記コード)問題ないと思ったのですがエラーが出てしまします。
エラー文で調べてみましたが(リンク内容)解決できませんでした。
どなたか助けていただけたらと思います。よろしくお願いします。
###コード
mysite/models.py
Python
1class Post(models.Model): 2 title = models.CharField("Title", max_length=255) 3 ...
mysite/views.py
Python
1class PostDetailView(DetailView): 2 template_name = 'mysite/post_detail.html' 3 model = Post 4 pk_url_kwarg = 'title' 5 slug_field = "title" 6 slug_url_kwarg = "post_title"
mysite/urls.py
Python
1 2urlpatterns = [ 3 ... 4 url(r'^blog/(?P<title>\w+)/$', views.PostDetailView.as_view(), name = "post_title"), 5 ... 6]
templates/mysite/blog.py
HTML
1{% for post in posts.all %} 2 <div class="blog-title"> 3 <!-- 現在はこれで動きます(blog/1) --> 4 <h1><a href="{% url 'mysite:post_title' post.id %}" >{{ post.title }}'</a></h1> 5 6 <!-- これでtitleはurlに表示されますが(blog/Title1)、エラーになります --> 7 <h1><a href="{% url 'mysite:post_title' post.title %}" >{{ post.title }}'</a></h1> 8 </div> 9 ... 10{% endfor %}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/13 00:19
2018/02/14 02:52
2018/02/28 12:42