如何在基于函数的视图中显示表单

how to display a form in function based view

当我尝试在 Django 的基于函数的视图中显示表单时出现错误。我可以将其显示在另一个 HTML 文件中,用户可以在博客中发表评论。但是,我认为如果用户可以在同一个 blog-detail HTML 文件上发表评论,对用户来说会更方便,所以我想实现它。 当我尝试时,出现了这个错误。 “/blogs/blog/30/ 处的 NoReverseMatch 反向 'blog' 没有找不到参数。尝试了 1 种模式:['blogs/blog/(?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' %}">&#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 %}

您在这里 <a href="{% url 'blog' %}">&#8592; 戻る</a> 调用了博客 URL 并且忘记在您的 URL 中传递 id,这就是它显示此错误的原因

NoReverseMatch at /blogs/blog/30/ Reverse for 'blog' with no arguments not found. 1 pattern(s) tried: ['blogs/blog/(?P[0-9]+)/$']

你必须像这样在这里传递 id

<a href="{% url 'blog' blog.id %}">&#8592; 戻る</a>