NoReverseMatch в / add_post обратное для «сведений о статье» с аргументами ‘(‘4’, ‘0’)’ не найден. попробовано 1 шаблон (ы): [‘blogpost/(?P[^/] )$’]

#django #django-models #django-templates

#django #django-модели #django-шаблоны

Вопрос:

Получение этой проблемы в моем проекте django blog. Все указано аккуратно, но я не понимаю, почему происходит сбой.

urls.py :

 from django.urls import path
from .views import Homeview, ArticleDetailView, AddPostView

urlpatterns = [
path('', Homeview.as_view() , name="home"),
path('blogpost/<str:pk>', ArticleDetailView.as_view(), name='article-details'),
path('add_post', AddPostView.as_view( ), name="add_posts")
] 
  

models.py

 from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse '''


class Post(models.Model):
blog_title =  models.CharField(max_length=200)
author = models.ForeignKey(User, on_delete=models.CASCADE)
body = models.TextField(default="")

def __str__(self):
    return self.blog_title   '|'   str(self.author)

def get_absolute_url(self):
    return reverse('article-details', args = str(self.id))
  

articledetails.html*
{% расширяет ‘home/base.html ‘ %}

 {% block content %}
<h1>{{post.blog_title}}</h1>
</br>
{{post.body}}
{% endblock %}
  

Ответ №1:

Аргумент аргументов reverse требует итеративного значения. Вы дали ему строку. Давайте предположим, что это «40».

Таким образом, функция reverse получит каждый элемент итерации и присвоит их аргументам url (здесь: pk ).

«40» является строкой, ее элементами являются отдельные символы: «4» и «0». Поскольку ваш URL-адрес имеет только один аргумент, у вас есть эта ошибка.

Что вы должны сделать, чтобы исправить ошибку:

 reverse('article-details', args=[str(self.id)])
  

Если вы хотите чистое исправление, вам также следует изменить <str:pk> вашего URL на <int:pk> . Ваши первичные ключи являются целыми числами, поэтому получите целое число в качестве URL-адреса вашего просмотра.

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

1. Это сработало, сэр!!! Большое спасибо за ваш ответ за помощь мне, сэр. Пытался выяснить, начиная с двух дней