简体   繁体   English

未找到“post_detail”的反转。 “post_detail”不是有效的视图函数或模式名称

[英]Reverse for 'post_detail' not found. 'post_detail' is not a valid view function or pattern name

I am trying to create a new post and when I click on the save button, I get error as stated in the image.我正在尝试创建一个新帖子,当我单击保存按钮时,出现如图所示的错误。 But when I go to the post list page, the post is created.但是当我进入帖子列表页面时,帖子就被创建了。 I am not able to understand the error and where to look for it.我无法理解错误以及在哪里寻找它。 I am new at django.我是 Django 的新手。 Please help!请帮忙! 这个错误

Main-urls.py file:主 urls.py 文件:

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include
from django.contrib.auth import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('blog_app.urls', namespace='blog_app')),
    url(r'^accounts/',include('accounts.urls', namespace='accounts')),
    #path('accounts/login/', views.LoginView.as_view(template_name='blog_app/login.html'),name='login'),
    #path('accounts/logout/',views.LogoutView.as_view(template_name='blog_app/base.html'),name='logout'),
]

blog_app-urls.py file: blog_app-urls.py 文件:

from django.conf.urls import url
from blog_app import views
from django.urls import path

app_name = 'blog_app'

urlpatterns = [
    url(r'^$', views.PostListView.as_view(),name='post_list'),
    url(r'^about/$', views.AboutView.as_view(),name='about'),
    url(r'^post/(?P<pk>\d+)$', views.PostDetailView.as_view(),name='post_detail'),
    url(r'^post/new/$', views.CreatePostView.as_view(),name='new_post'),
    url(r'^post/(?P<pk>\d+)/edit/$', views.UpdatePostView.as_view(),name='edit_post'),
    url(r'^drafts/$', views.DraftListView.as_view(),name='draft_post_list'),
    url(r'^post/(?P<pk>\d+)/remove/$', views.DeletePostView.as_view(),name='delete_post'),
    # url(r'^post/(?P<pk>\d+)/remove/$', views.post_remove,name='delete_post'),
    url(r'^post/(?P<pk>\d+)/publish/$', views.post_publish, name='post_publish'),
    url(r'^post/(?P<pk>\d+)/comment/$', views.add_comment_to_post, name='add_comment_to_post'),
    url(r'^comment/(?P<pk>\d+)/approve/$', views.comment_approve, name='comment_approve'),
    url(r'^comment/(?P<pk>\d+)/remove/$', views.comment_remove, name='comment_remove'),
    # path('register/',views.register,name='register'),

]

blog_app-views.py file: blog_app-views.py 文件:

from django.shortcuts import render,get_object_or_404,redirect
from django.utils import timezone
from django.contrib.auth.decorators import login_required
from blog_app.models import Post,Comment
from blog_app.forms import PostForm,CommentForm
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.views.generic import (TemplateView,ListView,DetailView,CreateView,
                                    UpdateView,DeleteView)

from django.urls import reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login,logout,authenticate

class AboutView(TemplateView):
    template_name = 'about.html'


class PostListView(ListView):
    model = Post

    def get_queryset(self):
        return Post.objects.filter(publish_date__lte = timezone.now()).order_by('-publish_date')


class PostDetailView(DetailView):
    model = Post

class CreatePostView(LoginRequiredMixin,CreateView):
    login_url = 'accounts/login/'
    redirect_field_name = 'blog_app/post_detail.html'
    form_class = PostForm
    model = Post

class UpdatePostView(LoginRequiredMixin,UpdateView):
    login_url = 'accounts/login/'
    redirect_field_name = 'blog_app/post_detail.html'
    form_class = PostForm
    model = Post

class DraftListView(LoginRequiredMixin,ListView):
    login_url = 'accounts/login/'
    redirect_field_name = 'blog_app/post_draft_list.html'
    model = Post

    def get_queryset(self):
        return Post.objects.filter(publish_date__isnull=True).order_by('-create_date')

class DeletePostView(LoginRequiredMixin,DeleteView):
    model = Post
    success_url = reverse_lazy('post_list')

blog_app-models.py file: blog_app-models.py 文件:

from django.db import models
from django.utils import timezone
from django.urls import reverse

class Post(models.Model):
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.CharField(max_length=150)
    text = models.TextField()
    create_date = models.DateTimeField(default=timezone.now)
    publish_date = models.DateTimeField(blank=True,null=True)
    # add in thumbnail later

    def publish(self):
        self.publish_date = timezone.now()
        self.save()

    def approveComment(self):
        return self.comments.filter(approve_comment=True)

    def get_absolute_url(self):
        return reverse("post_detail",kwargs={'pk':self.pk})

    def __str__(self):
        return self.title

    def snippet(self):
        return self.text[:100] + '...'

class Comment(models.Model):
    post = models.ForeignKey('blog_app.Post',related_name='comments', on_delete=models.CASCADE)
    author = models.CharField(max_length=150)
    text = models.TextField()
    create_date = models.DateTimeField(default=timezone.now)
    approve_comment = models.BooleanField(default=False)

    def approve(self):
        self.approve_comment = True
        self.save()

    def get_absolute_url(self):
        return reverse("post_list")

    def __str__(self):
        return self.text

base.html file: base.html 文件:

<!DOCTYPE html>
{% load staticfiles %}
<html>
    <head>
        <title>MyBlog</title>
        <!-- Latest compiled and minified CSS -->
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

        <!-- Optional theme -->
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

        {# MEDIUM STYLE EDITOR#}
        <script src="//cdn.jsdelivr.net/medium-editor/latest/js/medium-editor.min.js"></script>
        <link rel="stylesheet" href="//cdn.jsdelivr.net/medium-editor/latest/css/medium-editor.min.css" type="text/css" media="screen" charset="utf-8">


        {# Custom CSS#}
        <link rel="stylesheet" href="{% static 'css/blog_app.css' %}">

        {# Fonts#}
        <link href="https://fonts.googleapis.com/css?family=Montserrat|Russo+One" rel="stylesheet">





<body class='loader'>


  <nav class="navbar navbar-default techfont custom-navbar">
    <div class="container">


      <ul class="nav navbar-nav">
        <li><a class='navbar-brand bigbrand' href="{% url 'blog_app:post_list' %}">Home</a></li>
        <li><a href="{% url 'blog_app:about'%}">About</a></li>
        <li><a href="https://www.github.com">Github</a></li>
        <li><a href="https://www.linkedin.com">LinkedIn</a></li>

      </ul>

      <ul class="nav navbar-nav navbar-right">
        {% if user.is_authenticated %}
        <li>
          <a href="{% url 'blog_app:new_post' %}" >New Post</a>
        </li>

        <li>
          <a href="{% url 'blog_app:draft_post_list' %}">Drafts</a>
        </li>
        <li>
          <a href="{% url 'accounts:logout' %}" >Logout</a>
        </li>

        <li>
          <a >Welcome: {{ user.username }}</a>
        </li>
          {% else %}
          <li><a class='nav navbar-right' href="{% url 'accounts:login' %}" >Login</a></li>

        {% endif %}

      </ul>
  </div>
</nav>

  {# The actual blog posts#}
        <div class="content container">
            <div class="row">
                <div class="col-md-8">
                  <div class="blog_posts">
                    {% block content %}
                    {% endblock %}

                  </div>

                </div>
            </div>
        </div>

{# SCRIPTS#}

<script type="text/javascript" src="{% static 'js/blog.js' %}"></script>

</body>
</html>

post_list.html file: post_list.html 文件:

{% extends 'blog_app/base.html' %}

{% block content %}
<div class="centerstage">

    {% for post in post_list %}
        <div class="post">

            <h1><a href="{% url 'blog_app:post_detail' pk=post.pk %}">{{ post.title }}</a></h1>
            <p>{{ post.snippet }}</p>
            <div class="date">
              <p><b>Published on: </b> {{ post.publish_date|date:"D M Y"}}</p>
            </div>
            <a href="{% url 'blog_app:post_detail' pk=post.pk %}">Comments: {{ post.approveComment.count }}</a>
        </div>
    {% endfor %}
</div>
{% endblock %}

post_detail.html file: post_detail.html 文件:

{% extends 'blog_app/base.html' %}

{% block content %}


        <h1 class='posttitle loader'>{{ post.title }}</h1>

        {% if post.publish_date %}
            <div class="date postdate">
                {{ post.publish_date }}
            </div>

        {% else %}
            <a class="btn btn-default" href="{% url 'blog_app:post_publish' pk=post.pk %}">Publish</a>
        {% endif %}

      <p class='postcontent' >{{ post.text|safe|linebreaksbr }}</p>


      {% if user.is_authenticated %}
          <a class="btn btn-primary" href="{% url 'blog_app:edit_post' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"></span></a>
          <a class="btn btn-primary" href="{% url 'blog_app:delete_post' pk=post.pk %}"><span class="glyphicon glyphicon-remove"></span></a>
      {% endif %}



  <hr>
  <a class="btn btn-primary btn-comment" href="{% url 'blog_app:add_comment_to_post' pk=post.pk %}">Add comment</a>
  <div class="container">


  {% for comment in post.comments.all %}
  <br>
      {% if user.is_authenticated or comment.approve_comment %}

              {{ comment.create_date }}
              {% if not comment.approve_comment %}
                  <a class="btn btn-default" href="{% url 'blog_app:comment_remove' pk=comment.pk %}"><span class="glyphicon glyphicon-remove"></span></a>
                  <a class="btn btn-default" href="{% url 'blog_app:comment_approve' pk=comment.pk %}"><span class="glyphicon glyphicon-ok"></span></a>
              {% endif %}

          <p>{{ comment.text|safe|linebreaks }}</p>
          <p>Posted by: <strong>{{ comment.author }}</strong></p>

      {% endif %}
  {% empty %}
      <p>No comments posted.</p>
  {% endfor %}
</div>

{% endblock %}

In blog_app-models.py , you writeblog_app-models.py ,你写

class Post(models.Model):
    ...

    def get_absolute_url(self):
        return reverse("post_detail",kwargs={'pk':self.pk})

You forget to account for the fact the post_detail is namespaced under blog_app where it is include 'd in Main-urls.py .您忘记考虑post_detailblog_app下命名空间的事实,它includeMain-urls.py To correctly reverse this URL, you will need to write要正确反转此 URL,您需要编写

reverse("blog_app:post_detail",kwargs={'pk':self.pk})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 NoReverseMatch at /post/new Reverse for &#39;post_detail&#39; 未找到。 “post_detail”不是有效的视图函数或模式名称 - NoReverseMatch at /post/new Reverse for 'post_detail' not found. 'post_detail' is not a valid view function or pattern name 未找到带有参数 &#39;(&#39;&#39;,)&#39; 的 &#39;post_detail&#39; 反转。 尝试了 1 个模式:[&#39;post/(?P<slug> [-\\\\w]+)/$&#39;] - Reverse for 'post_detail' with arguments '('',)' not found. 1 pattern(s) tried: ['post/(?P<slug>[-\\w]+)/$'] NoReverseMatch at / Reverse for &#39;post_detail&#39; 未找到 - NoReverseMatch at / Reverse for 'post_detail' not found 单击发送按钮“post_detail”时出错不是有效的视图 function 或模式名称 - error while clicking the send button 'post_detail' is not a valid view function or pattern name 使用参数 &#39;(&#39;&#39;,)&#39; 和关键字参数 &#39;{}&#39; 未找到的 &#39;post_detail&#39; 反转。 尝试了 1 个模式:[&#39;posts/(?P[0-9]+)/$&#39;] - Reverse for 'post_detail' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['posts/(?P[0-9]+)/$'] 如何修复 NoReverseMatch at / Reverse for &#39;post_detail&#39; 关键字参数 &#39;{u&#39;pk&#39;: &#39;&#39;}&#39; not found。 尝试了 1 个模式:[&#39;post/<int:pk> /&#39;] - How to fix NoReverseMatch at / Reverse for 'post_detail' with keyword arguments '{u'pk': ''}' not found. 1 pattern(s) tried: ['post/<int:pk>/'] 如何解决此问题: 使用关键字 arguments '{'slug': ''}' 反向查找 'post_detail'。 尝试了 1 种模式:['(?P<slug> [-a-zA-Z0-9_]+)/$']?</slug> - How to fix this: Reverse for 'post_detail' with keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['(?P<slug>[-a-zA-Z0-9_]+)/$']? 评论未显示在post_detail视图中 - Comments not showing in post_detail view 反向使用关键字 arguments '{'pk': '', 'article_id': ''}' not found - Reverse for 'post_detail' with keyword arguments '{'pk': '', 'article_id': ''}' not found post_detail()视图缺少必需的位置参数: - post_detail() view missing required positional arguments:
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM