Django 单个帖子类别的重定向不正确
我正在开发我的个人博客;它只有两个类别,我想为这两个类别的职位有一个具体的名单 因此,我展开了get_absolute_url,如下所示:Django 单个帖子类别的重定向不正确,django,django-models,django-views,django-urls,django-2.1,Django,Django Models,Django Views,Django Urls,Django 2.1,我正在开发我的个人博客;它只有两个类别,我想为这两个类别的职位有一个具体的名单 因此,我展开了get_absolute_url,如下所示: from django.db import models from django.urls import reverse CATEGORY_CHOICES = ( ('G.I.S.', 'G.I.S.'), ('Sustainable Mobility', 'Sustainable Mobility'), ) class Blog(mod
from django.db import models
from django.urls import reverse
CATEGORY_CHOICES = (
('G.I.S.', 'G.I.S.'),
('Sustainable Mobility', 'Sustainable Mobility'),
)
class Blog(models.Model):
"""
Blog's post definition
"""
title = models.CharField(
max_length=70,
unique=True,
)
slug = models.SlugField(
unique=True,
)
contents = models.TextField()
publishing_date = models.DateTimeField()
category = models.CharField(
max_length=50,
choices=CATEGORY_CHOICES,
)
def __str__(self):
return self.title
def get_absolute_url(self):
if Blog.objects.filter(category="G.I.S."):
return reverse("gis_single_post", kwargs={"slug": self.slug})
if Blog.objects.filter(category="Sustainable Mobility"):
return reverse("sumo_single_post", kwargs={"slug": self.slug})
下面您可以看到视图.py;根据类别,它有不同的模型:
from django.shortcuts import render
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from .models import Blog
class GisSinglePost(DetailView):
model = Blog
queryset = Blog.objects.filter(category="G.I.S.")
context_object_name = 'post'
template_name = "gis_single_post.html"
class GisListPost(ListView):
model = Blog
queryset = Blog.objects.filter(category="G.I.S.")
context_object_name = 'posts'
template_name = "gis_list_post.html"
class SuMoSinglePost(DetailView):
model = Blog
queryset = Blog.objects.filter(category="Sustainable Mobility")
context_object_name = 'post'
template_name = "sumo_single_post.html"
class SuMoListPost(ListView):
model = Blog
queryset = Blog.objects.filter(category="Sustainable Mobility")
context_object_name = 'posts'
template_name = "sumo_list_post.html"
下面是带有四个路径的url.py:
from django.urls import include, path
from .views import GisSinglePost, GisListPost, SuMoListPost, SuMoSinglePost
urlpatterns = [
path("gis/", GisListPost.as_view(), name="gis_list_post"),
path("gis/<slug:slug>/", GisSinglePost.as_view(), name="gis_single_post"),
path("sustainable-mobility/", SuMoListPost.as_view(), name="sumo_list_post"),
path("sustainable-mobility/<slug:slug>/", SuMoSinglePost.as_view(), name="sumo_single_post"),
]
从django.url导入包括,路径
from.views导入GisSinglePost、GisListPost、SuMoListPost、SuMoSinglePost
URL模式=[
路径(“gis/”,GisListPost.as_view(),name=“gis_list_post”),
路径(“gis/”,GisSinglePost.as_view(),name=“gis_single_post”),
路径(“可持续移动/”,sumolistost.as_view(),name=“sumo_list_post”),
路径(“可持续移动/”,SuMoSinglePost.as_view(),name=“sumo_single_post”),
]
当我点击GIS分类的一个帖子时,它会毫无问题地显示相关的细节。但当我点击其他类别的帖子时,我会看到:
找不到页面(404)请求方法:获取请求URL:
提出人:
blog.views.gisinglepost
未找到与查询匹配的Articolo
您看到此错误是因为在Django中有DEBUG=True
设置文件。将其更改为False,Django将显示
标准404页
我在这个问题上纠缠了好几天了我如何解决?您应该重新定义
获取绝对url
方法。由于您的博客实例存在类别G.I.S,因此对于类别为可持续移动的博客实例,您永远不会获得第二名
def get_absolute_url(self):
if self.category == "G.I.S.":
return reverse("gis_single_post", kwargs={"slug": self.slug})
elif self.category == "Sustainable Mobility":
return reverse("sumo_single_post", kwargs={"slug": self.slug})
尝试用下一种方式重新定义您的get_absolute_url(self):
def get_absolute_url(self):
if self.category == "G.I.S.":
return reverse("gis_single_post", kwargs={"slug": self.slug})
if self.category == "Sustainable Mobility":
return reverse("sumo_single_post", kwargs={"slug": self.slug})
如何重新定义它?请参见编辑后的答案。好的,我看到有人直接回答了。当然没有解释原因。有趣的方法。