簡體   English   中英

如何在 Django 類 ListView 中添加“喜歡”按鈕

[英]How can i add a "like" button in a Django class ListView

我正在嘗試在我網站的帖子應用程序中添加一個“喜歡”按鈕,但因為我想將它添加到包含其余帖子條目的 ListView 中,並且每個人都可以選擇評論我有添加了一個 Formixin 來這樣做,所以,現在我無法為類似按鈕添加另一個表單,因為這意味着兩個帖子請求......所以我沒有找到明確的解決方案......我在這里和那里閱讀了有關使用 AJAX 的內容或 Json 技術,但作為我的新編程,我有點卡在其中……有人可以提供任何提示嗎?

雖然使用 AJAX(javascript XHR 請求)將是正確的方法,因此只需單擊一個喜歡按鈕就不需要刷新頁面,但您可以在沒有 AJAX 的情況下進行。

HTML

在 HTML 方面,您可以有多個表單 ( <form> ),每個帖子一個,它們有一個隱藏的輸入字段,即帖子的 id。 您已在 HTML 模板中明確設置,例如

{% for post in post_list %}
    <h3>{{ post.title }}</h3>
    <p>{{ post.summary }}</p>
    <form method="post">
       {% csrf_token %}
       <input type="hidden" value="{{ post.id }}" name="{{ form.id.html_name }}">
       <input type="submit">Like</input>
    </form>
{% endfor %}

所以基本上你多次重復使用表單,更改“值”屬性以匹配帖子。

姜戈形式

FormMixin添加到您的視圖是正確的步驟,只需將form_class用於自定義LikeForm其中只有一個名為id的 IntegerField 字段。

看法

通過添加FormMixin您將獲得form_valid()方法,您需要重寫該方法以保存類似內容:

def form_valid(self, form):
    id = form.cleaned_data['id']
    try:
        post = Post.objects.get(id=id)
    except Post.DoesNotExist:
        raise Http404
    post.likes.add(self.request.user)  # assuming likes is a m2m relation to user
    return redirect('post_list')  # this list view

希望我沒有那么晚,我在嘗試在我的網站上實現相同的功能時遇到了類似的挑戰。 我開始意識到每個按鈕 id 應該是唯一的(如果是博客,最好是帖子 id),但類可以相同。 我能夠解決它。 這是我最近在媒體上寫的一篇關於我遵循的步驟的文章,因此您可以在此處查看

暫無
暫無

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

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