是否可以使用 GET 方法将值从 HTML 页面传递到 Django 视图?
Is it possible to pass a value from HTML page to Django view using GET method?
我有一个基本侧边栏,其中包含两个项目 page1 和 page2。当用户点击一个项目时,它会呈现相应的页面。
我在边栏中还有一个过滤器,允许用户按类型过滤页面上的结果。
当我选择一个过滤器时,我能够在页面上看到适当的结果,但我的目的是让系统记住上次选择的过滤器,这样当用户选择一个新页面时,它会自动显示上次选择的过滤器的结果.这可以通过 GET 方法发送变量 'type' 来完成吗?或任何其他解决方案将不胜感激。
在 base.html 中,通过 Get 方法呈现新页面
<div id="page" class="collapse" aria-labelledby="headingUtilities"
data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
<a class="collapse-item" href="page1">Page1</a>
<a class="collapse-item" href="page2">Page2</a>
</div>
</div>
在base.html中,通过POST方法过滤当前页面
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Filter By Type:</h6>
<form name="modality" action="" id='type' method="post" enctype="multipart/form-data">
{% csrf_token %}
<input class="collapse-item" name ='type' type="submit" value="type1" onclick="this.form.submit()">
<input class="collapse-item" name ='type' type="submit" value="type2" onclick="this.form.submit()">
<input class="collapse-item" name ='type' type="submit" value="type3" onclick="this.form.submit()">
</form>
</div>
</div>
django 视图:
@login_required(login_url='login')
def page1(request):
if request.method == 'POST':
type = request.POST['type']
else:
type = 'type1'
return render(request, "dashboard/page1.html",
{
'type': type,}
@login_required(login_url='login')
def page2(request):
if request.method == 'POST':
type = request.POST['type']
else:
type = 'type1'
return render(request, "dashboard/page2.html",
{
'type': type,}
第 1 页HTML:
{% extends 'dashboard/base.html' %}
{% block content %}
<h1> Page1: {{type}} </h1>
{% end block %}
第 2 页HTML:
{% extends 'dashboard/base.html' %}
{% block content %}
<h1> Page2: {{type}} </h1>
{% end block %}
可以传参得到如下
urlpatterns = [
path('dashboard/page1/<type>, page1view),
path('dashboard/page2/<type>, page2view)
]
然后使用它们
def page1view(request, type):
pass
但我认为您应该改用 sessions。用户将自动向您发送每个新请求的会话标识符,django 将为您获取您选择存储在该用户会话中的所有数据。可以当字典使用。
request.session['type'] = type
type = request.session['type']
我有一个基本侧边栏,其中包含两个项目 page1 和 page2。当用户点击一个项目时,它会呈现相应的页面。 我在边栏中还有一个过滤器,允许用户按类型过滤页面上的结果。 当我选择一个过滤器时,我能够在页面上看到适当的结果,但我的目的是让系统记住上次选择的过滤器,这样当用户选择一个新页面时,它会自动显示上次选择的过滤器的结果.这可以通过 GET 方法发送变量 'type' 来完成吗?或任何其他解决方案将不胜感激。
在 base.html 中,通过 Get 方法呈现新页面
<div id="page" class="collapse" aria-labelledby="headingUtilities"
data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
<a class="collapse-item" href="page1">Page1</a>
<a class="collapse-item" href="page2">Page2</a>
</div>
</div>
在base.html中,通过POST方法过滤当前页面
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Filter By Type:</h6>
<form name="modality" action="" id='type' method="post" enctype="multipart/form-data">
{% csrf_token %}
<input class="collapse-item" name ='type' type="submit" value="type1" onclick="this.form.submit()">
<input class="collapse-item" name ='type' type="submit" value="type2" onclick="this.form.submit()">
<input class="collapse-item" name ='type' type="submit" value="type3" onclick="this.form.submit()">
</form>
</div>
</div>
django 视图:
@login_required(login_url='login')
def page1(request):
if request.method == 'POST':
type = request.POST['type']
else:
type = 'type1'
return render(request, "dashboard/page1.html",
{
'type': type,}
@login_required(login_url='login')
def page2(request):
if request.method == 'POST':
type = request.POST['type']
else:
type = 'type1'
return render(request, "dashboard/page2.html",
{
'type': type,}
第 1 页HTML:
{% extends 'dashboard/base.html' %}
{% block content %}
<h1> Page1: {{type}} </h1>
{% end block %}
第 2 页HTML:
{% extends 'dashboard/base.html' %}
{% block content %}
<h1> Page2: {{type}} </h1>
{% end block %}
可以传参得到如下
urlpatterns = [
path('dashboard/page1/<type>, page1view),
path('dashboard/page2/<type>, page2view)
]
然后使用它们
def page1view(request, type):
pass
但我认为您应该改用 sessions。用户将自动向您发送每个新请求的会话标识符,django 将为您获取您选择存储在该用户会话中的所有数据。可以当字典使用。
request.session['type'] = type
type = request.session['type']