找不到 Django 页面/没有 Post 匹配给定的查询

Django Page Not Found / No Post matches the given query

我不会去 blog/develops 但我得到这个错误: 找不到页面 (404) 没有 Post 匹配给定的查询。

您看到此错误是因为您的 Django 设置文件中有 DEBUG = True。将其更改为 False,Django 将显示标准的 404 页面。

我不明白为什么会出现此错误以及如何解决。

这是我的 urls.py 文件:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name="post_list"),
    path('<str:adres>/', views.post_detail, name='post-detail'),
    path('develops/', views.develop_list, name='develop_list')
]

这是 views.py 文件:

from django.shortcuts import render , get_object_or_404 , redirect
from .models import Post
from .forms import EmailAbonelikForm

def post_list(request):
    best_post = Post.objects.filter(best=True)
    posts = Post.objects.filter(best=False, dev = False)
    return render(request, 'blog/post_list.html', {'posts':posts , 'best_post':best_post})

def post_detail(request, adres):
    posts = get_object_or_404(Post , adres=adres)

    if request.method == 'POST':
        form = EmailAbonelikForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('post_list')
    else:
        form = EmailAbonelikForm()

    return render(request, 'blog/post_detail.html', {'posts':posts , 'form':form})

def develop_list(request):
    posts_dev = Post.objects.filter(dev=True)
    return render(request, 'blog/develop_list.html', {'posts_dev':posts_dev})

这是develop_list.html:

{% extends 'base.html' %}

{% block content %}
<div class="container mt-4">
    {% for post in posts_dev %}
    <a href="{% url 'post-detail' post.adres %}" style="color:black;">
        <div class="card mb-3" style="max-width:700px;">
            <div class="row no-gutters">
                <div class="col-md-4">
                    <img src="/media/{{ post.photo }}" class="card-img">
                </div>
                <div class="col-md-8">
                    <div class="card-body">
                        <h5 class="card-title">{{post.title}}</h5>
                        <p class="card-text">{{post.title}}</p>
                        <p class="card-text"><small class="text-muted">Etkinlik Tarihi: {{post.title}}</small></p>
                    </div>
                </div>
            </div>
        </div>
    </a>
    {% endfor %}
</div>
{% endblock %}

如何才能看到blog/develops.

这是因为 Django 的 url 调度程序实际上试图将您路由到 post_detail 视图。考虑这些 url 模式:

urlpatterns = [
    path('<str:adres>/', views.post_detail, name='post-detail'),
    path('develops/', views.develop_list, name='develop_list')
]

当您访问 blog/develops/ 时,Django 认为您将 str 参数 develops 传递给您的第一个 url 模式。为了缓解这种情况,您可以删除 post-detail 模式并将其附加在文件末尾的其他模式之后:

urlpatterns += path('<str:adres>/', views.post_detail, name='post-detail')

或者,更改详细信息模式,使其在命名参数前面有其他内容:

path('detail/<str:adres>/', views.post_detail, name='post-detail')

任何一个都应该使您的模式按预期运行,但为了清洁起见,我建议使用后一个选项。