#django #django-views #django-forms #django-templates
Вопрос:
У меня возникла ошибка, когда я пытался отобразить форму в представлении на основе функций в Django. Я мог бы отобразить его в другом HTML-файле, и пользователи смогут оставлять свои комментарии в блоге. Но я думаю, что пользователям будет удобнее, если они смогут прокомментировать один и тот же HTML-файл с подробностями из блога, поэтому я хочу его реализовать. Когда я попытался, появилась эта ошибка. «Ни разу не сходитесь в /блогах/блоге/30/ Обратное для «блога» без аргументов не найдено. 1 шаблон(ы) пробовал: [‘блоги/блог/(?P[0-9] )/$’]»
Любые комментарии могут помочь мне, и заранее спасибо за ваше время!!
Вот коды, которые я написал…
from django import forms
from .models import Comment
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('user', 'text',)
#views.py
@login_required
def blog(request, pk):
blog = get_object_or_404(Blog, pk=pk)
form = CommentForm()
# if request.method == 'POST':
# form = CommentForm(request.POST)
# if form.is_valid():
# comment = form.save(commit=False)
# comment.blog = blog
# comment.save()
# return redirect('blog', pk=blog.pk)
# else:
# form = CommentForm()
if blog.link_1 is not None and blog.link_2 is not None:
link_1 = blog.link_1
link_2 = blog.link_2
context = {
'blog': blog,
'link_1': link_1,
'link_2': link_2,
'form': form,
}
elif blog.link_1 is not None or blog.link_2 is not None:
link_1 = blog.link_1
link_2 = blog.link_2
context = {
'blog': blog,
'link_1': link_1,
'link_2': link_2,
'form': form,
}
else:
context = {
'blog': blog,
'form': form,
}
return render(request, 'blog/blog.html', context)
@login_required
def add_comment(request, pk):
blog = get_object_or_404(Blog, pk=pk)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.blog = blog
comment.save()
return redirect('blog', pk=blog.pk)
else:
form = CommentForm()
context = {
'form': form,
}
return render(request, 'blog/blog.html', context)
#urls.py
path('blog/<int:pk>/', views.blog, name='blog'),
path('blog/<int:pk>/comment/', views.add_comment, name='add_comment'),
#blog.html
{% extends 'base.html' %}
{% block title %}|{{ blog.title }}{% endblock %}
{% block content %}
<div class="header-bar">
<a href="{% url 'blog' %}">amp;#8592; 戻る</a>
</div>
<div class="body-container">
<div class="created-edit-delete">
<p>
{% if request.user == blog.user %}
<a href="{% url 'dashboard' user.id %}">あなた</a>が{{ blog.created }}に作成</p>
{% else %}
{{ blog.user }}が{{ blog.created }}に作成</p>
{% endif %}
<div class="icons">
{% if request.user == blog.user %}
<a href="{% url 'blog-update' blog.id %}" class="far fa-edit"></a>
<a href="{% url 'blog-delete' blog.id %}" class="far fa-trash-alt"></a>
{% endif %}
</div>
</div>
<h1>{{ blog.title }}</h1>
<p class="blog-content">{{ blog.content_1 }}</p>
{% if blog.content_2 %}
<p class="blog-content">{{ blog.content_2 }}</p>
{% endif %}
{% if blog.content_2 %}
<p class="blog-content">{{ blog.content_3 }}</p>
{% endif %}
<div class="ref-links">
{% if link_1 %}
<a href="{{ blog.link_1 }}">参考リンク</a>
{% endif %}
{% if link_2 %}
<a href="{{ blog.link_2 }}">参考リンク</a>
{% endif %}
</div>
<hr>
<div class="comment-area">
<div class="comment-form">
<h2>New comment</h2>
<form action="{% url 'add_comment' blog.id %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="button">追加</button>
</form>
</div>
<div class="comment-all">
{% for comment in blog.comments.all %}
<div class="comment">
<div class="date">{{ comment.created }}</div>
<strong>{{ comment.user }}</strong>
<p>{{ comment.text|linebreaks }}</p>
</div>
{% empty %}
<p>No comments here yet :(</p>
{% endfor %}
</div>
</div>
</div>
{% endblock %}
Ответ №1:
Вы назвали URL-адрес блога здесь <a href="{% url 'blog' %}">amp;#8592; 戻る</a>
и забыли передать идентификатор внутри своего URL-адреса, поэтому он показывает эту ошибку
NoReverseMatch в /блоги/блог/30/ Обратный для «блог» без аргументов не найден. 1 шаблон(ы) пробовал: [‘блоги/блог/(?P[0-9] )/$’]
вы должны сдать удостоверение личности вот так
<a href="{% url 'blog' blog.id %}">amp;#8592; 戻る</a>