Обратный для ‘add_comment’ с аргументами ключевого слова ‘{‘id’: «}’ не найден. попробовал 1 шаблон (ы): [‘AddComment/(?P[0-9] )/$’]

#python #django #django-forms

#python #django #django-forms

Вопрос:

Здравствуйте, я пытаюсь добавить комментарии к странице, но когда я нажимаю отправить, я получаю эту ошибку: обратный для ‘add_comment’ с аргументами ключевого слова ‘{‘id’: «}’ не найден. 1 шаблон (ы) опробован: [‘AddComment /(?P[0-9] )/$’]

forms.py

 class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ['response']
 

Форма на странице

         <form action="{% url 'CA:add_comment' id=climb.id %}" method="POST">
            {% csrf_token %}
            <label for ="comment"></label>
            <textarea class="form-control" name="comment" id = "comment" rows = "5"placeholder="Add a comment"></textarea>
            <br>
            <input type="submit" class = "btn btn-primary" value="Add Comment">
        </form> 
 

models.py

 class Comment(models.Model):
    response = models.CharField(default="Blank Comment", max_length=500)
    username = models.ForeignKey(User,default= 1, on_delete = models.CASCADE)
    date = models.DateTimeField(auto_now=True)
    climb = models.ForeignKey(Climb, on_delete = models.CASCADE)
 

views.py

 def addcomment(request, id):
    climb = Climb.objects.get(id=id)
    if request.method == "POST":
        form = CommentForm(request.POST)
        if form.is_valid():
            data = form.save(commit=False)
            data.response = request.POST["response"]
            data.username = request.user
            data.climb = climb
            data.save()
            return redirect('CA:cd', id=climb.id)
    else:
        form = CommentForm()
    context={
        "form" : form

    }
    return render(request, "climbDetail.html",context=context)
 

urls.py

 path('addComment/<int:id>/', views.addcomment, name='add_comment'),
 

Я не могу понять, что происходит не так. Буду признателен за любую помощь.

Комментарии:

1. вы не передаете экземпляр climb в контексте

Ответ №1:

не передавайте идентификатор, подобный этому id=climb.id , передавайте идентификатор, подобный этому climb.id , в вашей форме

   context={
    "form" : form

}
 

итак, чтобы получить доступ к идентификатору, вы должны добавить это в действие формы следующим образом

 <form action="{% url 'Ca:add_comment' form.id %}">
 

Комментарии:

1. <действие формы=»{% url ‘CA:add_comment’ climb.id %}» метод=»СООБЩЕНИЕ»>

2. Хорошо, я сделал это, и я получил сообщение об ошибке: обратный для ‘add_comment’ с аргументами ‘(«,)’ не найден. 1 шаблон (ы) опробован: [‘AddComment /(?P<id>[0-9] )/$’]

3. измените это обратное перенаправление (‘CA: cd’, id=climb.id ) с этим возвращением HttpResponseRedirect(request.path_info)

4. Это приводит к другому: обратное значение для ‘add_comment’ с аргументами ‘(«,)’ не найдено. попробовал 1 шаблон (ы): [‘AddComment/(?P<id>[0-9] )/$’] Возможно, мне просто придется поместить форму комментария на вторую страницу, поскольку я знаю, что это работает

5. welp оказывается, это не сработало, потому что в моей форме комментариев у меня была область, указанная как комментарий, когда она должна была быть ответом. Спасибо вам за вашу помощь, я действительно оценил ее. Вы заставили меня посмотреть на мой код шаг за шагом, и именно поэтому я смог увидеть проблему.