如何在Django中使用get_absolute_url在我的博客文章路径中添加字符串而不是整数?

问题描述 投票:1回答:1

我正在研究一个简单的博客项目,并且一直在YouTube上关注Corey Schafer。在教程中,他用整数创建了新的博客帖子(例如/ blog / 1,/ blog / 2等),但是我想用字符串创建我的帖子路径(例如blog / my-blog-post,/博客/新博客文章)。我是python和django的新手,我尝试过一些运气不好的事情。有关如何执行此操作的任何提示?

型号:

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})

网址:

from django.urls import path
from .views import BloggPostListViewHome, BloggPostListView, BloggPostDetailView
from . import views

path('blogg/<int:pk>/', BloggPostDetailView.as_view(), name='bloggpost-detail'),
python django url
1个回答
1
投票

例如,可以使用slug中的AutoSlugField来定义AutoSlugField字段。

您可以使用以下方法在虚拟环境中安装它:

django-autoslug package [readthedocs]

然后您可以使用以下方法向模型添加django-autoslug

pip install django-autoslug

然后在AutoSlugField中使用以下命令定义模式:

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})

如果URL模式中存在一个从属字段,则带有urls.py,例如path('blogg/<slug:slug>/', BloggPostDetailView.as_view(), name='bloggpost-detail'),SingleObjectMixin的基于类的视图将自动对从属执行过滤。

© www.soinside.com 2019 - 2024. All rights reserved.