在 url 中组合多个 slug

我正在尝试使用两个 slug 来生成一种帖子的网址。我的网站按类别划分,每个人都有一个或多个帖子。


视图.py


def singlePost(request, slug_post):

    blogpost = get_object_or_404(BlogPost, slug_post=slug_post)

    context = {"blogpost": blogpost}

    return render(request, "blog/single_post.html", context)



def singleCategory_postList(request, slug_category):

    category = get_object_or_404(Category, slug_category=slug_category)

    blogpost = BlogPost.objects.filter(category=category)

    context = {

            "category": category,

            "blogpost": blogpost,

            }

    return render(request, "blog/single_category.html", context)

我使用的 urls.py


path("category/<slug:slug_category>/", views.singleCategory_postList, name="single_category"),

path("<slug:slug_post>/", views.singlePost, name='single_blog_post'),

我想使用的 urls.py


path("<slug:slug_category>/", views.singleCategory_postList, name="single_category"),

path("<slug:slug_category>/<slug:slug_post>/", views.singlePost, name='single_blog_post'),

当我使用第二对路径时,它显示给我:


NoReverseMatch 在 /blog/gis/


反向使用关键字参数 '{'slug_post': 'rete-dei-sottoservizi-quadro-normativo'}' 未找到'single_blog_post'。尝试了 1 个模式:['blog\/(?P[-a-zA-Z0-9_]+)\/(?P[-a-zA-Z0-9_]+)\/$']


模型.py


class Category(models.Model):

    category_name = models.CharField(

                        max_length=50,

                        verbose_name="Categorie",

                        help_text="Every category must be not longer then 50 characters",

                        unique=True,

                        )

    slug_category = models.SlugField(

                verbose_name="Slug",

                unique=True,

                help_text="Slug is a field in autocomplete mode, but if you want you can modify its contents",

                )

....



在这个答案中解释了如何做与我尝试做的相同的事情,但对于我的情况,它不能正常工作,我不明白为什么。


弑天下
浏览 182回答 2
2回答

阿晨1998

但是就像你说的,URL 包含两个 slug,所以你需要在反向调用中传递它们。并且您需要使用在 URL 模式本身中使用的相同名称。return&nbsp;reverse("single_blog_post",&nbsp;kwargs={"slug":&nbsp;self.slug_post,&nbsp;"slug_category":&nbsp;self.category.slug_category})

喵喵时光机

我通过进一步的更改解决了我的问题。这是新的 singlePost 函数:def singlePost(request, slug_post, slug_category):&nbsp; &nbsp; category = get_object_or_404(Category, slug_category=slug_category)&nbsp; &nbsp; blogpost = get_object_or_404(BlogPost, slug_post=slug_post)&nbsp; &nbsp; category_blogpost = BlogPost.objects.filter(category=category)&nbsp; &nbsp; context = {"category": category, "blogpost": blogpost, "category_blogpost": category_blogpost}&nbsp; &nbsp; return render(request, "blog/single_post.html", context)以下是 Daniel Roseman 的代码:return reverse("single_blog_post", kwargs={"slug_post": self.slug_post, "slug_category": self.category.slug_category})现在我可以在我的网站中使用两个 slugs
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python