这是我第一次要在StackOverflow上问一些东西,我既兴奋又害怕,不知道为什么.我正在写一个Django应用,只是托管网帖。页面分为三(3)类(Index,lkmi和chiqung)。在index页面,你可以看到所有的帖子;在lkmi页面,你只能看到lkmi的帖子;在chiqung页面,你只能看到chiqung的帖子;所有这些都是由一个叫做 "index_page "的view控制的,它接收一个叫做 "cat "的参数,这个参数是其中一个类别(index,lkmi,chiqung)的URL。基于这个参数,它决定加载哪些文章。
* 现在问题来了
我找不到原因,但我只是加载lkmi部分有问题。索引页和 chiqung_page 可以完美加载,但我有一个
"Page Not Found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/lkmi/
使用blog.urls中定义的URLconf,Django尝试了这些URL模式,按照这个顺序。
admin/
<cat> [name='index_page']
post/<int:pk> [name='post_detallado']
^ckeditor/
目前的路径,lkmi,不符合其中任何一个。"我在这里留下模型,视图和URLs。模型种类
class Category(models.Model):
name = models.CharField(max_length=50)
presentation = RichTextUploadingField(default='')
order = models.IntegerField(null=True)
url = models.CharField(max_length=50,default='',null=False,blank=True)
class Meta:
verbose_name = ("Categoria")
verbose_name_plural = ("Categorias")
def __str__(self):
return self.name
def get_postes(self):
print('Entre get_postes')
if self.url == '/':
return Post.objects.all().order_by('-published_date')
else:
return Post.objects.filter(category=self.pk).order_by('-published_date')
岗位
class Post(models.Model):
title = models.CharField(('Titulo'),max_length=50)
category = models.ForeignKey("core.Category", verbose_name=("Categoria"), null=True, on_delete=models.CASCADE)
creation_date = models.DateTimeField(auto_now = True)
published_date = models.DateTimeField(auto_now=False, auto_now_add=False)
content = RichTextUploadingField()
author = models.CharField(("Autor/a"), max_length=50, default='El Autor')
class Meta:
verbose_name = ("Post")
verbose_name_plural = ("Postes")
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("_detail", kwargs={"pk": self.pk})
处理分类的视图
def index_page(request, cat):
print('function index_page')
print('cat ='+str(cat))
category = get_object_or_404(Category,url=cat)
print('get_object_or_404(Category,url=cat). Executed')
print(str(category))
postes = category.get_postes()
print('category.get_postes(). Executed')
return render(request, 'index.html',{'postes': postes,
'category': category})
来自应用程序的URL文件
urlpatterns = [
path('admin/',admin.site.urls),
path('<cat>', views.index_page, name='index_page'),
path('post/<int:pk>', views.detailed_post, name='detailed_post'),
]
如果我使用python manage.py shell,并寻找类别,使用 Category.objects.get(url='lkmi')
它返回所需的类别。基于 观点的评论,它 甚至没有进入视图功能因为在控制台中,它没有输出 "function index_page",尽管它是函数的第一行。
另外,如果我试着输入网址 "**127.0.0.1:8000lkmi",得到的结果是
Using the URLconf defined in blog.urls, Django tried these URL patterns, in this order:
1. admin/ -
2. <cat> name='index_page'] -
3. post/<int:pk> [name='post_detallado'].
但如果我只输入"127.0.0.0.1:8000whatever。"错误只是
No Categoria matches the given query.
所以在这种情况下,它进入函数,它给出了404错误,没有找到匹配的Category。我还是不明白,为什么当我尝试进入到 lkmi url...
非常感谢,希望有人能帮我解决这个问题,让我无法继续下去。
你的类叫 "Category",但你调用了 get_object_or_404()
关于 "Categoria "的报告
观点应该是:
def index_page(request, cat):
categoria = get_object_or_404(Category,url=cat)
postes = categoria.get_postes()
return render(request, 'index.html',{'postes': postes,
'categoria': categoria})