【问题标题】:I'm working on a Django blog, The error is我正在写一个 Django 博客,错误是
【发布时间】: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 错误。

标签: python html django


【解决方案1】:

您只需将“Main”的名称更改为“main”,因为您的 blog_details.html 页面位于主目录中。并正确检查 blog_details.html 目录的名称,而不是将其与完美名称正确集成。

 template = 'main/blog_details.html'

【讨论】:

  • 我没有得到你所说的第二句话,但我已将 'Main' 更改为 'main' 并且它不起作用。请帮忙
  • 有人告诉你,你必须正确检查你放置 blog_detail.html 的位置并在模板中正确分配它。在此之后它也没有工作,你应该检查命名空间是“main”或者它的名称不同。如果命名空间不同于将该命名空间放在“URL 标签”中的模板中 它是 {%URL%} 标签的语法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 2021-09-14
  • 2016-07-13
  • 2020-09-25
  • 1970-01-01
相关资源
最近更新 更多