簡體   English   中英

我想使用 Ajax 在 Django 中發送消息

[英]I want to use Ajax to send message in Django

我想在 Django 中使用 ajax 發表評論。

我有與 Post 類相關的 Message Class,並且我使用 PostDetailView 來顯示帖子和評論的內容。

我收到錯誤Reverse for 'user-posts' with arguments '('',)' not found. 1 pattern(s) tried: ['user\\/(?P<username>[^/]+)\\Z'] Reverse for 'user-posts' with arguments '('',)' not found. 1 pattern(s) tried: ['user\\/(?P<username>[^/]+)\\Z']

我還在引導鏈接中突出顯示。

我試圖刪除這兩個相應的部分,但我仍然得到同樣的錯誤。

這是我的代碼

網址.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'), 
]

視圖.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(“用戶帖子”的鏈接在哪里)

<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>

腳本.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 模板語言將其發送到您的模板

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM