Django Обратное для 'post-detail' с аргументами '(' ',)' не найдено. Попробован 1 шаблон (ов): ['post \\ / (? P <pk>[0-9] +) \\ / $'] - PullRequest
0 голосов
/ 26 февраля 2020

Я работаю над приложением для личного фитнес-блога и сталкиваюсь с этой ошибкой, когда пытаюсь разрешить пользователю "комментировать" сообщение.

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 - форма, в которой я пытаюсь сохранить введенные пользователем данные и вернуться к представлению после детализации, когда пользователь нажимает «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 - строка, сообщающая мне об ошибке «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})

ошибка трассировки

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]+)\\/$']

проблема

Когда я нажимаю «Добавить комментарий» на странице сведений о сообщении, я получаю указанную ошибку.

Что я пробовал

Я пытался редактировать URL / paths в файлах

Я попытался изменить представление

Я прочитал Что такое ошибка NoReverseMatch и как ее исправить? на StackOverflow и столько тем, сколько я смог найти.

Любая помощь приветствуется. Заранее спасибо!

1 Ответ

0 голосов
/ 26 февраля 2020

Вы не передаете post как контекст для шаблона

  return render(request, 'main/add_comment_to_post.html', {'form': form,'post':post})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...