Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django中的html页面中添加表单_Django_Django Models_Django Views_Django Forms - Fatal编程技术网

如何在django中的html页面中添加表单

如何在django中的html页面中添加表单,django,django-models,django-views,django-forms,Django,Django Models,Django Views,Django Forms,我想从一个特定的html中添加注释,它有自己的视图和模型,我不想创建一个新的html文件,比如comment.html,它只显示表单及其视图。我希望用户能够在帖子的正下方发表评论,这样用户就不必单击“添加评论”之类的按钮,这会将他们带到带有“comment.form”的新页面,然后他们就可以发表评论了。基本上需要一个页面,包含所有转移新闻及其各自的评论,以及旧评论下的评论表单。但是我被卡住了。我可以从管理员页面手动添加评论,效果很好,但似乎我必须创建另一个url和html文件来显示评论表单,以便

我想从一个特定的html中添加注释,它有自己的视图和模型,我不想创建一个新的html文件,比如comment.html,它只显示表单及其视图。我希望用户能够在帖子的正下方发表评论,这样用户就不必单击“添加评论”之类的按钮,这会将他们带到带有“comment.form”的新页面,然后他们就可以发表评论了。基本上需要一个页面,包含所有转移新闻及其各自的评论,以及旧评论下的评论表单。但是我被卡住了。我可以从管理员页面手动添加评论,效果很好,但似乎我必须创建另一个url和html文件来显示评论表单,以便用户能够添加评论(顺便说一句,我正在尝试创建一个与体育相关的网站)。提前谢谢

My models.py:

class Transfernews(models.Model):
    player_name = models.CharField(max_length=255)
    player_image = models.CharField(max_length=2083)
    player_description = models.CharField(max_length=3000)
    date_posted = models.DateTimeField(default=timezone.now)

class Comment(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    transfernews = models.ForeignKey(Transfernews, related_name="comments", on_delete=models.CASCADE)
    body = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '%s - %s' % (self.transfernews.player_name, self.user.username)
My forms.py:

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ('body', 'transfernews')
My views.py:

def addcomment(request):
    model = Comment
    form_class = CommentForm
    template_name = 'transfernews.html'



def transfer_targets(request):
    transfernews = Transfernews.objects.all()
    form = CommentForm(request.POST or None)
    if form.is_valid():
        new_comment = form.save(commit=False)
        new_comment.user = request.user
        new_comment.save()
        return redirect('transfernews/')
    return render(request, 'transfernews.html', {'transfernews': transfernews})
My URL.py:

path('transfernews/', views.transfer_targets, name='transfernews'),
My transfernews.html:

<h2>Comments...</h2>

{% if not transfernew.comments.all %}
No comments Yet...
{% else %}
{% for comment in transfernew.comments.all %}
  <strong>
    {{ comment.user.username }} - {{ comment.date_added }}
  </strong>
  <br/>
  {{ comment.body }}
  <br/><br/>
  {% endfor %}
  {% endif %}
  <hr>
  <div>Comment and let us know your thoughts</div>
  <form method="POST">
    {% csrf_token %}
    <input type="hidden" value="{{ transfernew.id}}">
    <div class="bg-alert p-2">
    <div class="d-flex flex-row align-items-start"><textarea class="form-control ml-1 shadow-none textarea"></textarea></div>
    <div class="mt-2 text-right"><button class="btn btn-primary btn-sm shadow-none" type="submit"> <a href="{% url 'comment' %}"></a>
    Post comment</button><button class="btn btn-outline-primary btn-sm ml-1 shadow-none" type="button">Cancel</button></div>
    </div>
  </div>
  </form>
注释。。。
{%如果不是transfernew.comments.all%}
还没有评论。。。
{%else%}
{%用于transfernew.comments.all%中的注释}

{{comment.user.username}-{{comment.date_added}


{{comment.body}}

{%endfor%} {%endif%}
评论并让我们知道您的想法 {%csrf_令牌%} 评论后取消
以下是您的操作方法:

首先,在
注释表单中添加一个字段:

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ('body', 'transfernews')
然后,在模板中,可以在表单中设置隐藏输入,以将注释链接到transfernews:

{% if form.errors %}
    <p>There are errors in your form :</p>
    <ul>{{ form.errors }}</ul>
{% endif %}
<form method="POST">
  {% csrf_token %}
  {# Add this next line #}
  <input type="hidden" value="{{ transfernew.id}}">
  <div class="bg-alert p-2">
    <div class="d-flex flex-row align-items-start">
      <textarea class="form-control ml-1 shadow-none textarea" name="body"></textarea>
    </div>
    <div class="mt-2 text-right">
      <button class="btn btn-primary btn-sm shadow-none" type="submit">Post comment</button>
      <button class="btn btn-outline-primary btn-sm ml-1 shadow-none" type="button">Cancel</button>
    </div>
  </div>
</form>

你认为有一个问题。它是基于类的视图吗?因为现在,它不会返回任何东西。您能否发布
Transfernews
的详细信息页面视图?编辑并添加了Transfernews视图。由于某些原因,此视图不起作用:(我正在将我的代码更新为您刚才所说的内容。我编辑了我的代码。错误是什么?我编辑了我的答案,以便在模板中提供表单,以便您可以看到错误。我认为它不起作用,因为您没有将
name=“body”
添加到
文本区域中。
def transfer_targets(request):
    transfernews = Transfernews.objects.all()
    form = CommentForm(request.POST or None)
    if form.is_valid():
        new_comment = form.save(commit=False)
        new_comment.user = request.user
        new_comment.save()
        return redirect('transfernews')
    return render(request, 'transfernews.html', {
        'transfernews': transfernews,
        'form': form
    })