【问题标题】:Call Django on HTML button click在 HTML 按钮单击时调用 Django
【发布时间】:2018-07-04 10:45:40
【问题描述】:

我正在尝试为一个 Django 项目制作一个基本的排序功能,但是当我单击“排序”按钮时,我不知道如何调用排序功能

Django 视图:

def sort_btn(request):
if request.GET.get('sort-btn'):
    cits = Citizen.objects.all().order_by('name')
return render_to_response(request, 'civil_reg/index.html', {'cits': cits})

HTML 按钮:

<button name="sort-btn" id="sort-btn">sort</button>

【问题讨论】:

  • 这会导致 KeyError,因为请求中没有传递 sort-btn 值。您需要至少创建一个带有值的 html 输入控件并发送请求
  • 这个答案会帮助here

标签: html django function sorting


【解决方案1】:

你需要用&lt;form&gt;标签包裹你的&lt;button&gt;,如下sn-p:

<form action='actionUrl' method='GET'>
<button type='submit'> sort me</button>
</form>

并且在您的urls.py 模块中,您应该将actionUrl 指向views.py 模块中的特定视图,如下所示:

from django.urls import path

from . import views

urlpatterns = [
    path(actionUrl, views.yourSort),
]

你应该更多地阅读关于 Django 的请求生命周期:

  1. 用户提交请求
  2. Django 尝试获取请求的 URL 和 urls.py 中定义的路由之间的第一个匹配项
  3. 请求被传递到匹配的视图
  4. 视图被执行,通常是一些模型处理
  5. 视图返回响应(模板)为HttpResponse

【讨论】:

  • 非常感谢。一个问题,现在我制作了一个全新的网页('action URL')来按名称排序,如果我想再做三个排序功能,我是否需要再做三个页面?还是有更好的办法?
  • 不客气,不,您不必创建三个模板,您只需在每个视图中为上下文对象中的“cits”键分配不同的值。澄清:{'cits': byNamecits} {'cits': byAreacits}...等
【解决方案2】:

我不知道你的程序,但我的实现是完整的,因为它是有效的。

<button name="button" type="submit" onclick="location.href='{% url "actionUrl" %}'"> Send</button>

我正在尝试在名为“sendEmail”的视图中调用一个函数

path('actionUrl/', views.sendEmail,name='actionUrl')

上面是我在 urls 文件中包含的行。

由于我是 Django 新手,请检查我是否错了。

继续编码!!

【讨论】:

    猜你喜欢
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 2013-02-26
    • 2012-08-11
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    相关资源
    最近更新 更多