找不到 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')
任何一个都应该使您的模式按预期运行,但为了清洁起见,我建议使用后一个选项。
我不会去 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')
任何一个都应该使您的模式按预期运行,但为了清洁起见,我建议使用后一个选项。