简体   繁体   中英

Django Reverse for 'post-detail' with arguments '('',)' not found. 1 pattern(s) tried: ['post\\/(?P<pk>[0-9]+)\\/$']

I am working on a personal fitness blog app and am running into this error when trying to allow a user to "comment" on a post.

Python 3.6.4, Django 3.0.2

models.py

class Comment(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE,related_name='comments')
    comment_id = models.AutoField(primary_key=True)
    author = models.ForeignKey(Profile, on_delete=models.CASCADE)
    content = models.TextField(max_length=1000, blank=False, default="")
    date_posted = models.DateTimeField(default=timezone.now)

    class Meta:
        ordering = ['date_posted']

    def __str__(self):
        return 'Comment {} by {}'.format(self.content, self.author.first_name)

urls.py

urlpatterns = [
    # path('', views.home, name="main-home"),
    path('', PostListView.as_view(), name="main-home"),
    path('admin/', admin.site.urls),
    path('register/', views.register, name="register"),
    path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
    path('post/new/', PostCreateView.as_view(), name='post-create'),
    path('post/<int:pk>/update/', PostUpdateView.as_view(), name='post-update'),
    path('post/<int:pk>/delete/', PostDeleteView.as_view(), name='post-delete'),
    path('about/', views.about, name="main-about"),
    path('search/', SearchResultsView.as_view(), name="main-search"),
    path('post/<int:pk>/comment/', views.add_comment_to_post, name='add_comment_to_post'),
]

post_detail.html

{% extends "main/base.html" %}

{% block content %}
    <article class="media content-section">
      <div class="media-body">
        <div class="article-metadata">
          <a class="mr-2" href="#">{{ object.author }}</a>
          <small class="text-muted">{{ object.date_posted }}</small>
        </div>
        <h2 class="article-title"><u>{{ object.title }}</u></h2>
        <p class="article-content">{{ object.content }}</p>
        <div class="row">
          <div class="col-xs-6 col-sm-4"><b>Distance: </b>{{ object.distance }} miles</div>
          <div class="col-xs-6 col-sm-4"><b>Time: </b>{{ object.time }} minutes</div>
          <div class="clearfix visible-xs-block"></div>
          <div class="col-xs-6 col-sm-4"><b>Pace: </b>{{ object.pace }} mins/mile</div>
        </div>
      </div>
    </article>
    <hr>
        <a class="btn btn-default" href="{% url 'add_comment_to_post' pk=post.pk %}">Add comment</a>

        {% for comment in post.comments.all %}
            <div class="comment">
                <div class="date">{{ comment.date_posted }}</div>
                <strong>{{ comment.author }}</strong>
                <p>{{ comment.content|linebreaks }}</p>
            </div>
        {% empty %}
            <p>No comments here yet :(</p>
        {% endfor %}
    </hr>
{% endblock content %}

add_comment_to_post.html - form where I am trying to save the user input and return to the post-detail view when the user hits 'send'

{% extends "main/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <h1>New comment</h1>
    <form method="POST">
        {% csrf_token %}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">New Comment</legend>
            {{ form|crispy }}
        </fieldset>
        <div class="form-group">
            <!-- Trying to link back to post-detail after 'send'>
            <a class="btn btn-outline-info" href="{% url 'post-detail' object.id %}">Send</a>
        </div>
    </form>
{% endblock %}

views.py - line giving me error is the "return render(request, 'main/add_comment_to_post.html', {'form': form})"

def add_comment_to_post(request, pk):

    post = get_object_or_404(Post, pk=pk)
    if request.method == "POST":
        form = CommentForm(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 = CommentForm()
    return render(request, 'main/add_comment_to_post.html', {'form': form})

traceback error

Template error:
In template /Users/parkermitchell/Desktop/307-Sec03-Team03/runn/main/templates/main/base.html, error at line 12
   Reverse for 'post-detail' with arguments '('',)' not found. 1 pattern(s) tried: ['post\\/(?P<pk>[0-9]+)\\/$']
   2 : 
   3 : <!DOCTYPE html>
   4 : <html>
   5 : <head>
   6 : 
   7 :     <!-- Required meta tags -->
   8 :     <meta charset="utf-8">
   9 :     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
   10 : 
   11 :     <!-- Bootstrap CSS -->
   12 :     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFc JlSAwiGgFAW/dAiS6JXm" crossorigin ="anonymous">
   13 : 
   14 :     <!-- More CSS (from Django tutorial) -->
   15 :     <link rel="stylesheet" type="text/css" href="{% static 'main/main.css' %}">
   16 : 
   17 :     {% if title %}
   18 :         <title>Runn - {{ title }}</title>
   19 :     {% else %}
   20 :         <title>Runn</title>
   21 :     {% endif %}
   22 : 


Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/parkermitchell/Desktop/307-Sec03-Team03/runn/main/views.py", line 39, in add_comment_to_post
    return render(request, 'main/add_comment_to_post.html', {'form': form})
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/shortcuts.py", line 19, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/base.py", line 171, in render
    return self._render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/base.py", line 163, in _render
    return self.nodelist.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/base.py", line 936, in render
    bit = node.render_annotated(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
    return self.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/base.py", line 163, in _render
    return self.nodelist.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/base.py", line 936, in render
    bit = node.render_annotated(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
    return self.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/base.py", line 936, in render
    bit = node.render_annotated(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
    return self.render(context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/defaulttags.py", line 443, in render
    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/urls/base.py", line 87, in reverse
    return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/urls/resolvers.py", line 677, in _reverse_with_prefix
    raise NoReverseMatch(msg)

Exception Type: NoReverseMatch at /post/3/comment/
Exception Value: Reverse for 'post-detail' with arguments '('',)' not found. 1 pattern(s) tried: ['post\\/(?P<pk>[0-9]+)\\/$']

The problem

When I click "Add comment" on the post detail page, I get the mentioned error.

What I have tried

I tried editing the urls/paths within the files

I tried changing the view

I have read What is a NoReverseMatch error, and how do I fix it? on StackOverflow and as many topics as I could find.

Any help is appreciated. Thank you in advance!

您没有将post作为上下文传递给模板

  return render(request, 'main/add_comment_to_post.html', {'form': form,'post':post})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM