【问题标题】:No Post matches the given query.in django没有帖子匹配给定的query.in django
【发布时间】:2019-04-21 06:13:28
【问题描述】:

我正在使用 django 2.0,这就是问题所在 找不到页面 (404) 请求方法:GET 请求网址:http://localhost:8000/blog/post-detail/ 提出者:blog.views.post_detail 没有帖子匹配给定的查询。

这是博客/网址

from django.urls import path,include
from .import views

urlpatterns = [
    path('blog/',views.post_list,name="post_list"),
    path('blog/post-detail/',views.post_detail,name="post_detail"),

]

和views.py

from django.shortcuts import render,get_object_or_404
from.models import Post

# Create your views here.
def post_list(request):
    object_list=Post.objects.all()
    context={
        'object_list': object_list,
    }
    return render(request,"blog.html",context)

def post_detail(request,slug=None):
    post=get_object_or_404(Post,slug=slug)
    context={
       'post':post,
    }
    return render(request,"post_detail.html",context)

和 post_detail.html

{% extends "base.html" %}
{% load static %}
{% block seo_title %}{% endblock %}
{% block seo_description %}{% endblock %}
{% block Content %}
<article>
  <div class="embed-responsive embed-responsive-16by9">
<img src="images/blog1.jpg" alt="" />
</div>
  <div class="post-content">

<h2>{{post.title}}</h2>
<div>
{{post.created}}  Author {{Post.user}}
<hr/>
<p>{{post.body}}</p>
</article>

{% endblock Content %}

任何人都可以帮助解决这个唯一的问题,我看到 SLUG 的东西我一定在某处感到困惑 博客.html

<!-- Blog -->
<div class="blog">
  <div class="row">
    <div class="col-sm-8">

      <!-- Blog Post-->
{% for obj in object_list %}
    {% if obj.status == 'Published' %}
      <article>
        <div class="embed-responsive embed-responsive-16by9">
      <img src="images/blog1.jpg" alt="" />
      </div>
        <div class="post-content">

    <h2>{{obj.title}}</h2>
    <div>
    {{obj.created}}  Author {{obj.user}}
    <hr/>
    <p>{{obj.body}}</p>
    <a class="mtr-btn button-navy ripple" href= "{% url 'post_detail' slug= post.slug %}">Continue reading →</a><br>
    </div>
    </article>
    {% endif %}
{% endfor %}

【问题讨论】:

  • 您的详细网址中似乎没有 slug 参数。
  • 仍然找不到页面当前路径 blog/post-detail/ 与其中任何一个都不匹配。

标签: python django


【解决方案1】:

post_detail(request,slug=None) 视图用于查看帖子的详细信息。所以你的网址格式不正确:

path('blog/post-detail/<slug:slug>',views.post_detail,name="post_detail"),

要在模板中调用,更简单正确的做法是:

<a class="mtr-btn button-navy ripple" href= "{% url 'post_detail' obj.slug %}">Continue reading →</a><br>
</div>

【讨论】:

  • 我已添加该行,这里是找不到错误页面当前路径 blog/post-detail/ 与其中任何一个都不匹配。
  • 您是否在 URL 中添加了obj.slug
  • 是的,我将它添加为部分继续领先它工作正常但尝试访问此 url localhost:8000/blog/post-detail 给出错误当前路径 blog/post-detail/ 不匹配任何这些。
  • 是的,我将其添加为继续领先的部分,它工作正常,但尝试访问此 url localhost:8000/blog/post-detail 会出现错误当前路径 blog/post-detail/ 与任何一个都不匹配这些。
  • 如果您已将 url 格式更改为 blog/post-detail/&lt;slug:slug&gt;localhost:8000/blog/post-detail 将不再是有效的网址。要查看帖子详细信息,您需要添加帖子的 slug。所以localhost:8000/blog/post-detail/post-slug
【解决方案2】:
#FOLLOW THIS PROCEDURE.I HOPE IT HELPS YOU OR ANY ONE ELSE IN THE FUTURE

# At blog/urls.py
from django.urls import path
from .views import (post_list, post_detail)


urlspatterns = [
    path('blog/', post_list, name='post-list'),
    path('<str:slug>/blog/post-detail/', post_detail, name='post-detail'),

]

#At blog/views.py
from django.shortcuts import render, get_object_or_404
from .models import Post


def post_list(request):
    posts = Post.objects.all() 
    template_name = blog/post_list.html
    context = {'posts':posts}
    return render(request, template_name, context)

def post_detail(request, slug):
    posts = get_object_or_404(Post, slug=slug)
    template_name = blog/post_detail.html
    context = {'posts':posts}
    return render(request, template_name, context)


# At the template/blog/post_list.html
{% block content %}
    {% for post in posts %}
        <article>
            <div>      
                <small>{{ post.created_on|date:"F d, Y" }}</small>
                <h2><a href="{{ post.slug }}">{{ post.title }}</a></h2>
                <p >{{ post.body }}</p>
            </div>
        </article>
    {% endfor %}
{% endblock content %}


# At template/blog/post_detail.html
<article>
    <div>
        <small>{{ posts.created_on|date:"F d, Y" }}</small>     
        <h2>{{ posts.title }}</h2>
        <p>{{ posts.body }}</p>
    </div>
</article>
#The above code should fix the the issue properly.

【讨论】:

    【解决方案3】:

    如果您的以下 Django 3 By Example Book 可以检查此解决方案,因为我遇到了同样的问题。

    1. 本书教如何使用 slug 属性创建 Post models.SlugField 和 unique_for_date='pusblish' 条件。
    2. 然后您从管理站点添加一些帖子。
    3. 然后您从管理站点添加一些帖子,然后在 admin.py 书中教如何编辑注册表 prepopulated_fields = {'sulg':('title',)}。
    4. 最后,本书教你如何编辑帖子。

    这是一个问题,因为从来没有 去寻找一个创建的帖子。所以,我的解决方案是删除 帖子和创建新帖子。

    这是我的代码:

    models.py

    from django.db import models
    from django.utils import timezone
    from django.contrib.auth.models import User
    from django.urls import reverse
    
    
    class PublishedManager(models.Manager):
        def get_queryset(self):
            return super(PublishedManager, self).get_queryset().filter(status='published')
    
    
    class Post(models.Model):
        STATUS_CHOICES = (
            ('draft', 'Draft'),
            ('published', 'Published'),
        )
        title = models.CharField(max_length=250)
        slug = models.SlugField(max_length=250, unique_for_date='publish')
        author = models.ForeignKey(User,
                                   on_delete=models.CASCADE,
                                   related_name='blog_posts')
        body = models.TextField()
        publish = models.DateTimeField(default=timezone.now)
        created = models.DateTimeField(auto_now_add=True)
        updated = models.DateTimeField(auto_now=True)
        status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
    
        objects = models.Manager() # The default manager.
        published = PublishedManager() # Our custom manager.
    
        class Meta:
            ordering = ('-publish',)
    
        def __str__(self):
            return self.title
    
        def get_absolute_url(self):
            return reverse('blog:post_detail',
                           args=[self.publish.year,
                                 self.publish.month,
                                 self.publish.day, self.slug])
    

    admin.py

    from django.contrib import admin
    from .models import Post
    
    
    @admin.register(Post)
    class PostAdmin(admin.ModelAdmin):
        list_display = ('title', 'slug', 'author', 'publish', 'status')
        list_filter = ('status', 'created', 'publish', 'author')
        search_fields = ('title', 'body')
        prepopulated_fields = {'slug': ('title',)}
        raw_id_fields = ('author',)
        date_hierarchy = 'publish'
        ordering = ('status', 'publish')
    

    views.py

    from django.shortcuts import render, get_object_or_404
    # another views...
    def post_detail(request, year, month, day, post):
        post = get_object_or_404(Post, slug=post,
                                       status='published',
                                       publish__year=year,
                                       publish__month=month,
                                       publish__day=day)
        return render(request,
                      'blog/post/detail.html',
                      {'post': post})
    

    blog/urls.py

    from django.urls import path
    from . import views
    
    app_name = 'blog'
    
    urlpatterns = [
        # post views
        path('', views.PostListView.as_view(), name='post_list'),
        path('<int:year>/<int:month>/<int:day>/<slug:post>/',
            views.post_detail,
            name='post_detail'),
    ]
    

    my_site/urls.py

    from django.contrib import admin
    from django.urls import path, include
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('blog/', include('blog.urls', namespace='blog')),
    ]
    

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2021-02-26
      • 2017-03-08
      • 2020-09-17
      相关资源
      最近更新 更多