【发布时间】:2020-08-15 15:11:46
【问题描述】:
找不到页面 (404) 请求方法:GET 请求网址:http://127.0.0.1:8000/detail/python 提出者: main.views.blog_detail 没有博客与给定的查询匹配。
它说错误是由“main.views.blog_detail”引发的,我错过了什么或可能是什么错误?
这是我的 urls.py:
from django.urls import path
from . import views
app_name = 'main'
urlpatterns = [
path('' , views.test , name='test_view'),
path('blog/', views.blog_list, name='blog_list'),
path('<slug:category_slug>' , views.blog_list , name='blog_list'),
path('detail/<slug:blog_slug>' , views.blog_detail , name='blog_detail'),
]
这是我的views.py文件:
from django.shortcuts import render
from django.http import HttpResponse
from .models import Blog,BlogCategory
from django.shortcuts import get_object_or_404
# Create your views here.
def test(request):
template = 'base.html'
# context = {'product_list':productlist, 'category_list':categorylist, 'category':category}
return render(request, template)
def blog_list(request, category_slug=None):
category = None
bloglist = BlogCategory.objects.all()
if category_slug:
category = get_object_or_404(BlogCategory,slug=category_slug)
bloglist = bloglist.filter(category=category)
template = 'main/blog.html'
context = {'blog_list':bloglist}
return render(request, template, context)
def blog_detail(request, blog_slug):
print(blog_slug)
blogdetail = get_object_or_404(Blog, slug=blog_slug)
template = 'Main/blog_details.html'
context = {'blog_detail':blogdetail}
return render(request, template, context)
这是我的 models.py 文件:
from django.db import models
from datetime import datetime
from django.utils.text import slugify
# Create your models here.
class Blog(models.Model):
blog_title = models.CharField(max_length=200)
blog_content = models.TextField()
blog_published = models.DateTimeField('date published', default=datetime.now)
blog_category = models.ForeignKey('BlogCategory', on_delete=models.SET_NULL, null=True)
slug = models.SlugField(blank=True,null=True)
def save(self, *args, **kwargs):
if not self.slug and self.blog_title:
self.slug = slugify(self.blog_title)
super(Blog,self).save(*args, **kwargs)
def __str__(self):
return self.blog_title
class BlogCategory(models.Model):
blog_category = models.CharField(max_length=200)
blog_summary = models.CharField(max_length=200)
slug = models.SlugField(blank=True,null=True)
def save(self, *args, **kwargs):
if not self.slug and self.blog_category:
self.slug = slugify(self.blog_category)
super(BlogCategory,self).save(*args, **kwargs)
class Meta:
# Gives the proper plural name for admin
verbose_name_plural = "Categories"
def __str__(self):
return self.blog_category
这是我的 bloglist.html:
{% extends 'base.html' %}
{% block content %}
<div class="row">
{% for bl in blog_list %}
<div class="col s12 m6">
<a href="{% url 'main:blog_detail' bl.slug %}">
<div class="card hoverable">
<div class="card-content">
<span class="card-title">{{bl.blog_category}}</span>
<p style="font-size:70%">Published {{bl.blog_published}}</p>
<p>{{bl.blog_summary}}</p>
</div>
</div>
</div>
{% endfor %}
{% endblock %}
这是我的 blogdetails.html:
{% extends 'base.html' %}
{% block content %}
<div class="row">
<div class="col s12, m8, l8">
<h3>{{blog_detail.blog_title}}</h3>
<p style="font-size:70%">Published {{blog_detail.blog_published}}</p>
{{blog_detail.blog_content|safe}}
</div>
</div>
{% endblock %}
【问题讨论】:
-
终端中显示 slug 但它给出 404 错误。