Я хочу использовать Ajax для отправки сообщения в Django
Я хочу опубликовать комментарий с помощью ajax в Django.
У меня есть класс Message, связанный с классом Post, и я использую PostDetailView для отображения содержимого поста и комментариев.
Я получаю ошибку Reverse for 'user-posts' with arguments '('',)' not found. 1 pattern(s) tried: ['user\\/(?P<username>[^/]+)\\Z']
Также я выделил ссылку для bootstrap.
Я попытался удалить эти две соответствующие части, но все равно получаю ту же ошибку.
это мой код
urls.py
urlpatterns = [
path('',PostListView.as_view(),name='blog-home'),
path('user/<str:username>',UserPostListView.as_view(),name='user-posts'),
path('post/<int:pk>',PostDetailView.as_view(),name='post-detail'),
]
views.py
class PostDetailView(DetailView):
model = Post
def get(self, *args, **kwargs):
form = CommentForm()
comments = Message.objects.all()
return render(self.request, 'blog/post_detail.html',
{"form": form, "comments": comments})
def post(self, *args, **kwargs):
if self.request.is_ajax and self.request.method == "POST":
form = CommentForm(self.request.POST)
if form.is_valid():
instance = form.save()
ser_instance = serializers.serialize('json', [ instance, ])
return JsonResponse({"instance": ser_instance}, status=200)
else:
return JsonResponse({"error": form.errors}, status=400)
return JsonResponse({"error": ""}, status=400)
html(где находится ссылка на 'user-posts')
<div class="post-header">
<h2 class="post-title">{{object.title}}</h2>
</div>
<div class="author-detail">
<a
href="{% url 'user-posts' object.author.username %}"
class="roomListRoom__author"
>
<div class="avatar avatar--small">
<img src="{{object.author.profile.image.url}}" />
</div>
<span>@{{object.author.username}}</span>
</a>
<img
class="rounded-circle account-img"
src="{{object.author.profile.image.url}}"
/>
<div class="author-info">
<p>
@<a href="{% url 'user-posts' object.author.username %}">
{{object.author}}
</a>
</p>
<p>{{object.date_posted|timesince|split_timesince:"," }}前</p>
</div>
</div>
script.js
$(document).ready(function () {
$("#comment-form").submit(function (e) {
e.preventDefault();
var serializedData = $(this).serialize();
$('[name="csrfmiddlewaretoken"]').attr("value");
$.ajax({
type: "POST",
url: $(this).attr("action"),//here will be '{% url ;post-detail object.id %}'
data: serializedData,
beforeSend: function (response) {
$(".save-comment").addClass("disabled").text("saving...");
console.log(_comment);
},
success: function (response) {
$("#friend-form").trigger("reset");
var instance = JSON.parse(response["instance"]);
var fields = instance[0]["fields"];
$("#comments").prepend(
`<div class="comment">
<div class="avatar avatar--small">
<img
src="{{message.user.profile.image.url}}"
alt="user profile image"
/>
</div>
<div class="comment-body">
<span class="comment-author">}</span>
<span>${fields["body"]}}</span>
</div>
</div>`
);
// $(".save-comment").removeClass("disabled").text("Submit");
},
error: function (response) {
alert(response["responseJSON"]["error"]);
},
});
});
});
Как я могу это исправить?
"{% url 'user-posts'' username=username|safe %}"
помните, если вы хотите использовать имя пользователя в вашем url, вы просто получаете имя пользователя в вашем представлении как args и отправляете его в ваш шаблон с помощью языка шаблонов django