Я хочу использовать 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

Вернуться на верх