[英]Changing id field to slug field in django
當我在 urlconfig 中使用<int:pk>
來查看我的博客的DetailView
頁面時,一切正常。
# included from urls.py in main dir
urlpatterns = [
path('', views.index, name='blog_index'),
path('blogs', views.allblogs.as_view(), name='blogs'),
path('blogs/<int:pk>', views.blogDetail.as_view(), name='blog-detail'),
]
# result url example 127.0.0.1:8000/blog/blogs/2
后來我改變主意,將 url 顯示為127.0.0.1:8000/blogs/new-blog
而不是int
值。 為了達到這個結果,我對urls.py進行了以下更改,
urlpatterns = [
path('', views.index, name='blog_index'),
path('blogs', views.allblogs.as_view(), name='blogs'),
re_path(r'^blogs/(?P<slug_me>[-\w]+)$', views.blogDetail.as_view(), name='blog-detail'),
]
以及對models.py的以下補充:
class Blog(models.Model):
...
slug = models.SlugField(default=slugify('iamslug'+str(id)))
def save(self, *args, **kwargs):
if not self.id:
self.slug = slugify(self.title)
super(Blog, self).save(*args, **kwargs)
def get_absolute_url(self):
return reverse('blog-detail', kwargs={'slug':self.slug, 'id':self.id})
但是現在當我訪問127.0.0.1:8000/blog/blogs
時,它會拋出以下錯誤:
Reverse for 'blog-detail' with keyword arguments '{'slug': 'djangodbmodelsfieldscharfield', 'id': 1}' not found. 1 pattern(s) tried: ['blog\\/blogs/(?P<slug_me>[-\\w]+)$']
在127.0.0.1:8000/blog/blogs/new-blog
,它會拋出這個錯誤:
Generic detail view blogDetail must be called with either an object pk or a slug in the URLconf.
我無法前進。 我嘗試更改urls.py
以包含slug關鍵字,這導致Page Not Found 。
# changed re_path(r'^blogs/(?P<slug_me>[-\w]+)$', views.blogDetail.as_view(), name='blog-detail') to
re_path(r'^blogs/(?P<slug>[-\w]+)$', views.blogDetail.as_view(), name='blog-detail')
在你的urls.py
中試試這個
urlpatterns = [
path('', views.index, name='blog_index'),
path('blogs', views.allblogs.as_view(), name='blogs'),
path('blogs/<slug:slug>/', views.blogDetail.as_view(), name='blog-detail'),
您的models.py
應該看起來像這樣
class Blog(models.Model):
...
slug = models.SlugField()
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
return super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse('blog-detail', kwargs={'slug':self.slug})
嚴格使用 slugfield 並查看 django文檔以獲取 url 路徑
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.