#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 оказывается, это не сработало, потому что в моей форме комментариев у меня была область, указанная как комментарий, когда она должна была быть ответом. Спасибо вам за вашу помощь, я действительно оценил ее. Вы заставили меня посмотреть на мой код шаг за шагом, и именно поэтому я смог увидеть проблему.