Реверс для 'blogpost' с аргументами '('',)' не найден
Повтор для 'blogpost' с аргументами '('',)' не найден. Испробован 1 шаблон(ы): ['blog/(?P[0-9]+)\Z']
Я сталкиваюсь с этой проблемой в каждом проекте. Поэтому, пожалуйста, любой разработчик решите эту проблему
.
my urls.py
from django.urls import path
from .import views
urlpatterns = [
path('', views.index, name='Blog_home'),
path('<int:pk>', views.blogpost, name='blogpost'),
]
my views.py
from django.shortcuts import render
from blog.models import Post
# Create your views here.
def index(request):
post = Post.objects.all()
context = {'post':post}
return render(request, 'blog/bloghome.html', context)
def blogpost(request, pk):
blog_post = Post.objects.get(id=pk)
context = {'blog_post':blog_post}
return render(request, 'blog/blogpost.html', context)
my models.py
from django.db import models
# Create your models here.
class Post(models.Model):
post_id = models.AutoField(primary_key=True)
title = models.CharField(max_length=100)
content = models.TextField()
author = models.CharField(max_length=50)
date_and_time = models.DateTimeField(blank=True)
def __str__(self):
return self.title
Шаблон: bloghome.html
{% extends 'basic.html' %}
{% block title %} Blog {% endblock title %}
{% block blogactive %} active {% endblock blogactive %}
{% block style %}
.overlay-image{
position: absolute;
height: auto;
width: 100%;
background-position: center;
background-size: cover;
opacity: 0.5;
}
{% endblock style %}
{% block body %}
<div class="container">
{% for post in post %}
<div class="row">
<div class="col-md-7 py-4">
<div class="row g-0 border rounded overflow-hidden flex-md-row shadow-sm h-md-250 position-relative">
<!-- <div class="col-auto m-auto img-fluid">
<img src="#">
</div> -->
<div class="col p-4 blog d-flex flex-column position-static">
<strong class="d-inline-block mb-2 text-primary">Code</strong>
<h3 class="mb-0">{{post.title}}</h3>
<div class="mb-1 text-muted">{{post.date_and_time}}</div>
<p class="card-text mb-auto">{{post.content | truncatechars:150}}</p>
<div class="my-2">
<a href="{% url 'blogpost' blog_post.id %}" class="btn btn-primary">Continue reading</a>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
{% endblock body %}
Шаблон: blogpost.html
{% extends 'basic.html' %}
{% block title %} Blog {% endblock title %}
{% block body %}
<div class="container">
<div class="row">
<div class="col-md-8">
<h2>{{post.title}}</h2>
</div>
</div>
</div>
{% endblock body %}
Ошибка
NoReverseMatch at /blog/
Reverse for 'blogpost' with arguments '('',)' not found. 1 pattern(s) tried: ['blog/(?P<pk>[0-9]+)\\Z']
Ошибка в шаблоне: bloghome.html
<a href="{% url 'blogpost' blog_post.id %}" class="btn btn-primary">Continue reading</a>
Прошу любого разработчика решить эту проблему.
- views.py
from django.shortcuts import render, get_object_or_404
from blog.models import Post
def index(request):
post = Post.objects.all()
context = {'post': post}
return render(request, 'blog/bloghome.html', context)
def blogpost(request, pk):
blog_post = get_object_or_404(Post, pk=pk)
context = {'blog_post': blog_post}
return render(request, 'blog/blogpost.html', context)
Шаблон bloghome.html ожидает наличия переменной с именем blog_post
:
{% url 'blogpost' blog_post.id %}
Но вы не передаете такую переменную в шаблон:
def index(request):
post = Post.objects.all()
context = {'post':post}
return render(request, 'blog/bloghome.html', context)
Вы передаете переменную с именем post
, а не blog_post
.
В файле bloghome.html,
вместо, <a href="{% url 'blogpost' blog_post.id %}" class="btn btn-primary">Continue reading</a>
попытка, <a href="{% url 'blogpost' post.post_id %}" class="btn btn-primary">Continue reading</a>
и в blogpost.html,
вместо, <h2>{{post.title}}</h2>
попытка, <h2>{{blog_post.title}}</h2>