Я работаю над приложением для личного фитнес-блога и сталкиваюсь с этой ошибкой, когда пытаюсь разрешить пользователю "комментировать" сообщение.
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 и столько тем, сколько я смог найти.
Любая помощь приветствуется. Заранее спасибо!