【发布时间】:2021-02-16 23:06:58
【问题描述】:
我正在做一个 reddit 克隆项目,其中一个功能是进行 upvote/downvote。我希望用户能够在 post-list.html 页面上单击 upvote/downvote 并显示更新,仅此而已。我试图返回 None 但 django 不允许它。我试图返回“/”,但随后 django 从顶部返回了一个网页。
另外,我觉得我的upvote/downvote需要很长时间才能更新,这很奇怪,我想知道是否有办法加快它。
这是我的 base.html,它具有 upvote/downvote 功能:
{% for post in posts %}
<div class="post">
<div class="vote">{% include "Reddit_app/vote-thumbnail.html" with el=post %}</div>
这里是 vote-thumbnail.html
<div class="voting_panel">
<div class="vote-logo"><a class="glyphicon glyphicon-chevron-up
{% if el|user_has_voted:user == 1 %} text-success {%else%} text-muted {% endif %}" href="{% url 'upvote-thumbnail' pk=el.pk %}"></a></div>
<div class="score">{{ el.get_score }}</div>
<div class="vote-logo"><a class="glyphicon glyphicon-chevron-down
{% if el|user_has_voted:user == -1 %} text-success {%else%} text-muted {% endif %}" href="{% url 'downvote-thumbnail' pk=el.pk %}"></a></div>
</div>
这是我的 urls.py 和帖子链接
path('content/<uuid:pk>/upvote-thumbnail/', views.vote_thumbnail, {'is_upvote': True}, name='upvote-thumbnail'),
path('content/<uuid:pk>/downvote-thumbnail/', views.vote_thumbnail, {'is_upvote': False}, name='downvote-thumbnail')
path('', views.post_list, name='post_list'),
这是我的意见.py
def vote_thumbnail(request, pk, is_upvote):
content_obj = Votable.get_object(pk)
content_obj.toggle_vote(request.user, UserVote.UP_VOTE if is_upvote else UserVote.DOWN_VOTE)
return redirect('/') #what to return here?
【问题讨论】:
-
post-list.html 使用什么 url 路径。你能分享你的 post-list.html 的 url 路径吗?您可以通过该 url 路径的名称简单地重定向到该 url 路径:
redirect("post-list") -
这种事情几乎总是通过ajax请求来完成。了解ajax基础知识是一个很好的学习项目。给出如何做到这一点的完整示例超出了堆栈溢出的范围。但是如果你谷歌“django ajax 教程”,你会发现很多例子。