Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django中使用get_absolute_url将字符串添加到我的博客文章路径而不是整数?_Python_Django_Url - Fatal编程技术网

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

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_

我正在做一个简单的博客项目,一直在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_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'),