Python 如何在django中使用get_absolute_url将字符串添加到我的博客文章路径而不是整数?
我正在做一个简单的博客项目,一直在YouTube上关注Corey Schafer。在教程中,他使用整数创建新的博客文章(例如/blog/1、/blog/2等),但我希望使用字符串创建我的文章路径(例如blog/my blog post、/blog/new blog post)。我对python和django还不太熟悉,我尝试过一些运气不好的东西。有什么建议吗 型号:Python 如何在django中使用get_absolute_url将字符串添加到我的博客文章路径而不是整数?,python,django,url,Python,Django,Url,我正在做一个简单的博客项目,一直在YouTube上关注Corey Schafer。在教程中,他使用整数创建新的博客文章(例如/blog/1、/blog/2等),但我希望使用字符串创建我的文章路径(例如blog/my blog post、/blog/new blog post)。我对python和django还不太熟悉,我尝试过一些运气不好的东西。有什么建议吗 型号: class BloggPost(models.Model): tittel = models.CharField(max_
class BloggPost(models.Model):
tittel = models.CharField(max_length=100)
innhold = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='blogg_foto')
def __str__(self):
return self.tittel
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
网址:
从django.url导入路径
从.views导入BloggPostListViewHome、BloggPostListView、BloggPostDetailView
从…起导入视图
路径('blogg/',BloggPostDetailView.as_view(),name='bloggpost-detail'),
您可以定义一个slug
字段,例如使用来自的
您可以通过以下方式在虚拟环境中安装:
pip install django-autoslug
然后在url.py
中定义一个模式:
path('blogg/<slug:slug>/', BloggPostDetailView.as_view(), name='bloggpost-detail'),
path('blogg/',bloggpostdailview.as_view(),name='bloggpost-detail'),
如果URL模式中存在slug字段,则带有
SingleObjectMixin
的基于类的视图(如DetailView
和UpdateView
)将自动对slug执行过滤。我得到的404仍然是blog path整数。有没有我需要导入SingleObjectMixin的地方?@AndréKrosby:没有,你可能需要重新填充你的数据库,可能在slug为空的时候?你改变了get\u absolute\u url
了吗?@AndreKrosby:你也需要改变路径
,看看数据库中是否填充了slug
列,很可能你应该创建一个新的BloggPost
我把url中的“BloggPost detail”改成了“post detail”,这就行了。我的HTML url是{%url'post detail'bloggpost.id%}
,现在应该是bloggpost.slug吗?
@AndréKrosby:是的,尽管用{%url…%}
替换{blogpost.get_absolute_url}}
可能更好(不带括号)。
from autoslug import AutoSlugField
class BloggPost(models.Model):
tittel = models.CharField(max_length=100)
slug = AutoSlugField(populate_from='tittel')
innhold = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='blogg_foto')
def __str__(self):
return self.tittel
def get_absolute_url(self):
return reverse('post-detail', kwargs={'slug': self.slug})
path('blogg/<slug:slug>/', BloggPostDetailView.as_view(), name='bloggpost-detail'),