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

程序员

我正在尝试在我的网站上进行投票和否决功能。但是有一个我不喜欢的特定行为,即每当用户单击按钮时,他都不应该重定向到另一个页面,而应该保留在同一页面上。

单击 upvote 按钮后会发生什么,它转到了http://localhost:8001/upvote/2/我不想要的 url 我希望它保持在同一页面上http://localhost:8001/view-supplier/

模型.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

视图.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)

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

查看供应商.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>
早期编码器

您需要实现一个 API(应用程序编程接口)来异步发送赞成票和反对票。Django REST framework是创建您自己的 API 的方法。您可以在 YouTube 上观看有关该主题的数小时视频教程。Django REST framework 的文档非常好,也很容易阅读。Django 是一个服务器端的 web 框架,这意味着它只有在你提交到服务器时才能帮助你。您绝对可以重新加载同一页面:

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

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

如果您可能出于对学习异步编码的错误恐惧而决定以老式的方式将数据发送到您的服务器,您可以随时使用您的赞成和反对来提交用户数据并更新计数。然后,在您的 view_supplier 视图中,您需要获取更新的视图计数并将其传递给上下文。因此,您的 upvote 视图会更改 upvote 计数并触发 Viewsupplier 视图。然后,在 ViewSupplier 视图中,您获取计数并将其添加到上下文中

# in your template
<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>

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

    # Get the updated count:
    suppliers_votes_count = {}
    for supplier in suppliers:
        upvote_count    = supplier.upvotes
        downvote_count  = supplier.upvotes

        supplier_count = {supplier: {'upvote': upvote_count, 'downvote': downvote_count } }
    
    suppliers_votes_count.update(supplier_count)

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

    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 HttpResponseRedirect(reverse('core:view_supplier'))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Servlet重定向到同一页面,并显示错误消息

删除无法正常工作并重定向到同一页面-Laravel

烧瓶:提交表单后重定向到同一页面

如何使用URL中的$ _GET参数重定向到同一页面

点击重定向到其他商店的同一页面

多语言重定向URL到同一页面

重定向到Django中的同一页面

表单提交后重定向到同一页面中的锚点

组件在重定向到同一页面时未呈现

POST请求后如何重定向到同一页面

注销后重定向到同一页面

URL重写重定向到同一页面

如何在Codeigniter中使用数据重定向到同一页面

注销按钮将uesr重定向到同一页面,而不是注销用户

Asp.net mvc登录后重定向到同一页面

Magento上的联系表单重定向到同一页面

Spring 3.0:如何重定向到同一页面

登录后将用户重定向到同一页面

仅当用户重定向到同一页面时才显示Div

成功提交表单并在确认消息上单击“确定”后,重定向到同一页面

将提交按钮重定向到同一页面

当iframe页面刷新时,它重定向到主页而不是同一页面

使用 PHP 重定向到同一页面以及成功消息

使用 HttpPost 方法提交表单后 ASP.NET Core 重定向到同一页面

在 Codeigniter 中切换语言后重定向到同一页面

html表单按钮重定向到同一页面

更改密码不断重定向到同一页面

重写然后使用 .htaccess 重定向到同一页面

如何在 django 中的表单操作后重定向到同一页面