当前位置: 首页 > 知识库问答 >
问题:

事件发生后如何使页面重定向到同一页面

闾丘成双
2023-03-14

我正在努力使一个向上投票和向下投票的功能在我的网站。然而,有一个我不喜欢的特殊行为,那就是每当用户点击按钮时,他不应该被重定向到另一个页面,而应该保持在同一页面上。

点击upvote按钮后,会转到urlhttp://localhost:8001/upvote/2/,这是我不想要的。我希望它保持在同一页面上,即http://localhost:8001/view-supplore/

models.py

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=254, unique=True)

    # CUSTOM USER FIELDS
    firstname = models.CharField(max_length=30)
    lastname = models.CharField(max_length=30)
    upvotes = models.IntegerField(default=0)
    downvotes = models.IntegerField(default=0)
    objects = UserManager()

    def get_absolute_url(self):
        return "/users/%i/" % (self.pk)
        
    def get_email(self):
        return self.email

views.py

def Viewsupplier(request):
    title = "All Suppliers"
    suppliers = User.objects.filter(user_type__is_supplier=True)

    context = {"suppliers":suppliers, "title":title}

    return render(request, 'core/view-suppliers.html', context)

@login_required
def upvote(request, pk):
    supplier_vote = get_object_or_404(User, id=pk)
    supplier_vote.upvotes += 1
    supplier_vote.save()
    upvote_count = supplier_vote.upvotes
    context = {"supplier_vote":supplier_vote, "upvote_count":upvote_count}
    return render(request, "core/view-suppliers.html", context)

@login_required
def downvote(request, pk):
    supplier_vote = get_object_or_404(User, id=pk)
    supplier_vote.downvotes -= 1
    supplier_vote.save()
    downvote_count = supplier_vote.downvotes
    context = {"supplier_vote":supplier_vote, "downvote_count":downvote_count}
    return render(request, "core/view-suppliers.html", context)

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('upvote/<int:pk>/', views.upvote, name='upvote'),
    path('downvote/<int:pk>/', views.downvote, name='downvote'),
]

查看-supplier.html

<table class="table table-borderless table-data3">
    <thead>
        <tr>
            <th>No</th>
            <th>Country</th>
            <th>Votes</th>
        </tr>
    </thead>
    <tbody>
        {% for supplier in suppliers %}
        <tr>
            <td>{{forloop.counter}}</td>
            <td>{{supplier.country}}</td>
            <td>
                <div class="table-data-feature">
                    <a href="{% url 'upvote' supplier.id %}" class="m-r-10">
                        <button class="item" data-toggle="tooltip" data-placement="top" title="Like">
                        <i class="zmdi zmdi-thumb-up"></i>{{upvote_count}}</button>
                    </a>
                    <a href="{% url 'downvote' supplier.id %}">
                        <button class="item" data-toggle="tooltip" data-placement="top" title="Dislike">
                        <i class="zmdi zmdi-thumb-down"></i>{{downvote_count}}</button>
                    </a>
                </div>
            </td>
        </tr>
        {% empty %}
            <tr><td class="text-center p-5" colspan="7"><h4>No supplier available</h4></td></tr>
        {% endfor %}
    </tbody>
</table>

共有1个答案

巫马盛
2023-03-14

您需要实现一个API(应用程序编程接口)来异步发送upvote和downvote。Django REST框架是创建您自己的API的方法。你可以在YouTube上看几个小时关于这个主题的视频教程。Django REST框架的文档非常好读。Django是一个服务器端的Web框架,这意味着只有当您提交给服务器时,它才能帮助您。您绝对可以重新加载相同的页面:

return HttpResponseRedirect(reverse('<app_name>:<url_name>'))

但是,会有一个中断。因此,处理这类行为的推荐方法是使用JavaScript的API(如REST框架的Fetch API)进行异步调用

 类似资料:
  • 这是第2页中的代码: 我找不到怎么解决的是,当我点击第1页的选项2时,除了打开第2页,它应该显示给我选择的选项“chiclayo”和这个选项的自我内容;我希望在点击第1页的选项3时发生同样的事情,该选项应该选择“Trujillo”选项并向我显示其内容。我已经尝试了“onclick”事件,但我没有得到结果,我不知道这是正确的方式还是有更好的选择;也许使用javascript或jquery代码。我很感

  • 问题内容: 如何使用PHP重定向到同一页面? 例如,在本地我的网址是: 如何在我的网站内重定向到另一个页面,例如: 我知道这可能是错误的,但是我真的需要把整个内容放进去吗?如果以后不是呢? 有没有办法做这样的事情?另外,我有很多代码,然后在处理完一些代码后结束…我试图使用该代码进行重定向。这可以吗? 问题答案: 有许多不同的(docs)属性可返回有关当前页面的信息,但是我的首选方法是使用: 域之后

  • 我正在用Express开发一个具有聊天功能的多页面web应用程序(由socket.io提供)。用户可以邀请其他人到私人共享聊天室(该聊天室还有其他组件,如共享画板)。我想在完成邀请事务后将两个用户(邀请者和被邀请者)重定向到不同的URL。 因为socket.io不能访问路由的请求和响应对象,所以我尝试将socket.io实例传递到路由处理中。除了重复事件处理程序堆积在页面刷新上的问题之外,Expr

  • 我想在登录后将用户重定向到同一页面。该场景是,如果用户未登录,将重定向到登录页面。在登录页面上,当他单击一个可用的用户选项时,我想存储用户id,然后将他重定向回他来自的同一页面。为此,我使用以下代码: 在应用程序中提供帮助。rb: 在SigninController中: 在登录/索引页中:

  • 问题内容: 我正在使用ajax调用在服务文件中执行功能,并且如果响应成功,我想将页面重定向到另一个URL。目前,我正在通过使用简单的js“ window.location = response[‘message’];”来做到这一点。但是我需要用angularjs代码替换它。我看过关于的各种解决方案,他们使用了$location。但是我是新手,对实现它有困难。 问题答案: 您可以使用Angular

  • 我有一个两步验证表单,这意味着第一个用户输入得到验证(在ValidatecKetData控制器中),如果一切正常,您可以进入下一个表单页面,我可以通过 问题:在第二页,用户需要上传一个文件,如果他不这样做,验证失败。 如果是这种情况,验证器类立即重定向,因为它是后路由,所以不起作用。 所以我创建了一个这样的获取路线: 并将其放入-方法: 我把它放到了-method中,因为如果用户不在第二页附加文件