NoReverseMatch в / post / new / Reverse для 'post_publish' с аргументами ключевого слова '{' pk ':' '}' не найден - PullRequest
0 голосов
/ 08 июня 2018

Пожалуйста, нажмите на ссылку, чтобы увидеть картинку, чтобы увидеть ошибку.

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.

Спасибовы.

1 Ответ

0 голосов
/ 08 июня 2018

Мое первое предположение заключается в том, что пост-объект здесь равен нулю:

<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

...