#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. Это сработало, сэр!!! Большое спасибо за ваш ответ за помощь мне, сэр. Пытался выяснить, начиная с двух дней