я продолжаю получать ошибку 404 при попытке создать блог с использованием django с помощью руководства djangogirls

#python #django

#python #django

Вопрос:

я продолжаю получать страницу с ошибкой (404), когда я запускаю свой сервер для django, когда я нажимаю ссылку на подробную информацию о публикации. Я думаю, что с моим кодом все в порядке, поэтому мне нужна помощь, чтобы определить, почему я получаю ошибку.

это мой views.py

 from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Post
from django.utils import timezone
# Create your views here.

def post_list(request):
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('created_date')
    return render(request, 'blog2app/home_post_list.html', {'posts': posts})

def post_detail(request,    pk):
    post = get_object_or_404(Post,  pk=pk)
    return render(request,  'blog2app/postdetail.html', {{'post': post}})
  
 this is my blog2appurls.py
  
 from django.urls import path
from . import views


urlpatterns = [
   path(r'^$', views.post_list, name="homepage"),
   path(r'^post/(?P<pk>d )/$', views.post_detail,  name='post_detail'),
]
  

это мой blog2/urls.py

 from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path(r'^admin/$', admin.site.urls),
    path(r'^$', include('blog2app.urls')),
]
  

это мой home_post_list.html

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% for post in posts %}
    <p><h4>Published: {{ post.published_date }}</h4></p>
    <h1><strong><a href="{% url 'post_detail' pk=post.pk %}"> {{ post.title }} </a></strong></h1><br>

    {% endfor %}
</body>
</html>
  

это мой detailpost.html

 <html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{%  if  post.published_date %}
{{  post.published_date }}
{% endif %}
<h1>{{  post.title  }}</h1>
<p>{{   post.body|linebreaksbr  }}

</body>
</html>
  
 this is the error page on chrome.
Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/
Using the URLconf defined in blog2.urls, Django tried these URL patterns, in this order:

^admin/$
^$
The empty path didn't match any of these.

You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page
  

сервер разработки не показывает ошибок.

blog2app — это имя моего приложения. blog2 — это мое имя проекта. я использую pycharm idle для разработки.

я буду очень рад, если кто-нибудь сможет предложить какое-либо обучающее видео, особенно для создания блогов с помощью django.

Комментарии:

1. не могли бы вы предоставить подробную информацию об ошибке….

2. ваше имя приложения blog2app? можете ли вы правильно открыть просмотр списка?

3. Удалите $ from path(r'^$', include('blog2app.urls')) . $ означает конец строки, то есть URL заканчивается там и post/<pk>/ является полосатым.

Ответ №1:

я изменил свой detailpost.html чтобы

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{  posts.published_date    }}
<h1>{{  posts.title }}</h1>
<p>{{   posts.body|linebreaksbr }}
</body>
</html>
  

я изменил свой views.py чтобы

 from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Post
from django.utils import timezone
# Create your views here.

def post_list(request):
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('created_date')
    return render(request, 'blog2app/home_post_list.html', {'posts': posts})

def post_detail(request, pk=None ):
    post = Post.objects.get(pk=pk)
    context = {'posts': post}
    return render(request,  'blog2app/postdetail.html', context)
  

я изменил свой home_post_list.html чтобы

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% for post in posts %}
    <p><h4>Published: {{ post.published_date }}</h4></p>
    <h1><strong><a href="{% url 'post_detail_pk' pk=post.pk %}"> {{ post.title }} </a></strong></h1><br>

    {% endfor %}
</body>
</html>
  

и я перестал видеть ошибку.
Я пришел к выводу, что я использовал сообщение в

 post = Post.objects.get(pk=pk)
  

для вызова моего первичного ключа вместо использования сообщений в

 context = {'posts': post}
  

Учебник Макса Гудриджа по django действительно помог мне.