Please, click the link to see the picture to see the error.
base.html文件
<ul class= 'nav navbar-nav navbar-right'>
{% if user.is_authenticated %}
<li>
<a href="{% url 'post_new' %}">New post</a>
</li>
<li>
<a href="{% url 'post_draft_list' %}">Drafts</a>
</li>
<li>
<a href="{% url 'logout' %}">Log out</a>
</li>
<li>
<a >Welcome: {{ user.username }}</a>
</li>
{% else %}
<li>
<a class = 'nav navbar-right' href="{% url 'login' %}">
<span class = 'glyphicon glyphicon-user'></span>
</a>
<a class = 'nav navbar-right' href= "{% url 'signup' %}">
Sign up</a>
post_detail.html
{% extends 'blog/base.html'%}
{% block content %}
<h1 class= 'posttitle loader'>{{ post.title }}</h1>
{% if post.published_date %}
<div class="date postdate">
{{ post.published_date }}
</div>
{% else %}
<a class = 'btn btn-primary' href=" {% url '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 'post_edit' pk=post.pk %}">
<span class = 'glyphicon glyphicon-pencil'></span>
</a>
<a class= 'btn btn-primary' href="{% url 'post_remove' pk=post.pk %}">
<span class = 'glyphicon glyphicon-remove'></span>
</a>
{% endif %}
<hr>
{% if user.is_authenticated %}
<a class = 'btn btn-primary btn-comment' href="{% url 'add_comment_to_post'
pk=post.pk %}">Comment</a>
{% else %}
<a class = 'btn btn-primary btn-comment' href="{% url 'comment_redirect'
pk=post.pk %}">Comment</a>
{% endif %}
<div class="container">
{% for comment in post.comments.all %}
<br>
{% if user.is_authenticated or comments.approved_comments %}
{{ comment.created_date }}
{% if not comment.approved_comments %}
<a class= 'btn btn-default' href="{% url 'comment_remove' pk=comment.pk
%}">
<span class = 'glyphicon glyphicon-remove'></span></a>
<a class= 'btn btn-primary' href="{% url 'comment_approve' pk=comment.pk
%}">
<span class = 'glyphicon glyphicon-ok'></span></a>
{% else %}
{% endif %}
<p>{{ comment.text|safe|linebreaks }}</p>
<p>Posted by: {{ comment.author }}</p>
{% endif %}
{% empty %}
<p>No comments</p>
{% endfor %}
</div>
{% endblock %}
post_form.html
% extends 'blog/base.html'%}
{% load bootstrap3 %}
{% block content %}
<h1>New post</h1>
<form class="post-form" method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Save</button>
</form>
<script>
var editor = new MediumEditor('.editable');
</script>
{% endblock %}
urls.py
from django.conf.urls import url
from blog import views
urlpatterns = [
url(r'^about/$', views.AboutView.as_view(), name = 'about'),
url(r'^$', views.PostListView.as_view(),name = 'post_list' ),
url(r'^post/(?P<pk>\d+)$', views.PostDetailView.as_view(), name = 'post_detail'),
url(r'^post/new/$', views.CreatePostView.as_view(), name = 'post_new'),
url(r'^post/(?P<pk>\d+)/edit/$', views.PostUpdateView.as_view(), name = 'post_edit'),
url(r'^post/(?P<pk>\d+)/remove/$', views.PostDeleteView.as_view(), name = 'post_remove'),
url(r'^drafts/$', views.DraftListView.as_view(),name = 'post_draft_list' ),
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'),
url(r'^signup/$', views.SignUp.as_view(), name ='signup'),
url(r'^comment/(?P<pk>\d+)/Comment/$', views.comment_red, name = 'comment_redirect'),
url(r'^post/(?P<pk>\d+)/publish/$', views.post_publish,
name='post_publish'),
]
views.py
from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone
from django.views.generic import (TemplateView, ListView, DetailView,
CreateView,UpdateView,DeleteView)
from blog.models import Post,comments, User
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import UserCreationForm
from blog.forms import PostForm, CommentsForm
from django.urls import reverse_lazy
from django.contrib.auth import login, logout
from . import forms
Created views here.
class AboutView(TemplateView):
template_name = 'about.html'
class PostListView(ListView):
model = Post
def get_query(self):
return post.object.filter(published_date__lte=timezone.now()).orderby('-
published_date')
class PostDetailView(DetailView):
model = Post
class CreatePostView(LoginRequiredMixin,CreateView):
login_url = '/login/'
redirect_field_name = 'blog/post_detail.html'
form_class = PostForm
model = Post
class PostUpdateView(LoginRequiredMixin, UpdateView):
login_url = '/login/'
redirect_field_name = 'blog/post_detail.html'
form_class = PostForm
model = Post
class PostDeleteView(LoginRequiredMixin, DeleteView):
model = Post
success_url = reverse_lazy('post_list')
class DraftListView(LoginRequiredMixin, ListView):
login_url = '/login/'
redirect_field_name = 'blog/post_draft_list.html'
model = Post
def get_query(self):
return post.object.filter(published_date__isnull =
True).order_by('created_date')
class SignUp(CreateView):
form_class = forms.UserCreateForm
success_url = reverse_lazy('login')
template_name = 'sign_up.html'
model = User
############COMMENT###################
@login_required
def post_publish(request, pk):
post = get_object_or_404(Post, pk=pk)
post.publish()
redirect('post_detail', pk=pk)
def comment_red(request,pk):
post = get_object_or_404(Post, pk=pk)
return render(request,'blog/comment_redirect.html')
@login_required
def add_comment_to_post(request,pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = CommentsForm(request.POST)
if form.is_valid():
comment = form.save(commit = False)
comment.post = post
comment.save()
return redirect('post_detail', pk=post.pk)
else:
form = CommentsForm()
return render(request, 'blog/comment_form.html',{'form':form})
@login_required
def comment_approve(request, pk):
comment = get_object_or_404(comments, pk=pk)
comment.approve()
return redirect('post_detail', pk=comment.post.pk)
@login_required
def comment_remove(request, pk):
comment = get_object_or_404(comments, pk=pk)
comment.delete()
return redirect('post_detail', pk=comment.post.pk)
我可以帮助我,在我出错的地方或我需要的地方帮助我,我只是坚持这一点。最初,当我点击导航栏上的新帖子时,它工作正常,当我可以输入文字和作者时,它会引导我到表格,但现在当我点击那里时,我得到了这个NoReverseMatch at /post/new/ Reverse for 'post_publish' with keyword arguments '{'pk': ''}' not found
。
谢谢。
答案 0 :(得分:0)
我的第一个猜测是post对象在这里为null:
<a class = 'btn btn-primary' href=" {% url 'post_publish' pk=post.pk
%}">Publish</a>
但是要确保我们需要一个完整的堆栈。
编辑#1
我们仍然缺少追溯,我无法在你的照片中看到它,但我的答案仍然有效。 post.pk为None,你应该用object.pk替换它,因为你正在使用Detailview。
https://docs.djangoproject.com/en/2.0/ref/class-based-views/generic-display/#detailview