为什么我在/出现错误NoReverseMatch?

时间:2020-05-16 13:50:57

标签: python django

我正在尝试在Django上建立一个博客网站。我是一个初学者,我不知道为什么会收到此错误。 请帮助我解决此错误。我正在提供我的代码views.py,models.py和base.html文件

#models.py
from django.db import models
from django.urls import reverse


class Post(models.Model):
    author = models.ForeignKey(
        'auth.User',
        on_delete = models.CASCADE,
        null = True
        )
    title = models.CharField(max_length = 20, default='')
    text = models.TextField()


    def __str__(self):
        return self.title

    def get_absolute_url(self): # new
        return reverse('blog_post_details', args=[str(self.id)])

views.py

from django.views.generic import ListView, DetailView
from django.views.generic.edit import CreateView

from .models import Post

class HomeResponse(ListView):
        model = Post
        template_name = 'home.html'

class PostDetail(DetailView):
    """docstring for PostDetail"""
    model = Post
    template_name = 'post_detail.html'



class NewPost(CreateView):
        model = Post
        template_name = 'new_post.html'
        fields = '__all__'

这是我的urls.py代码

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('', views.HomeResponse.as_view(), name='blog_name'),
    path('post/new/', views.NewPost.as_view(), name='blog_new_post'),
    path('post/<int:pk>/',views.PostDetail.as_view(),name='blog_post_details'),
]

base.html浏览器显示此代码错误。它显示Reverse for 'blog_post_details' with no arguments not found. 1 pattern(s) tried: ['post/(?P<pk>[0-9]+)/$']

<!DOCTYPE html>
<html>
<head>
    <title>Home</title>
</head>
<body>
    <header>
        <h1>Django Blog</h1>
        <h4 style="float: right;"><a href="{% url 'blog_new_post' %}">+ New Post</a></h4>
        <hr>
    </header>
    <a href="{% url 'blog_name' %}">Home</a>
    <a href="#"></a>

    {% block content %}{% endblock content %}

</body>
</html>


{% extends 'base.html' %}

这是带有blog_post_details链接的模板 {%块内容%}

    {% for post in object_list %}

            <fieldset><a href="{% url 'blog_post_details' %}">
                <h1>{{ post.title }}</h1>
                <p style="font-size: 20px;">{{ post.text }}</p>
                <h4>By: {{ post.author }}</h4></a>
            </fieldset>
    {% endfor %}
{% endblock content %}

1 个答案:

答案 0 :(得分:1)

您还需要在模板中添加ID,详细信息视图专门在寻找一个ID以显示在url和view中提及但在模板中未提及的详细信息视图

<a href="{% url 'blog_post_details' post.id %}">