如何解决在 Django 中从视图到 url 获取字符串变量 希望这有助于为您寻找正确的方向
我是 Python 和 Django 的初学者,我正在尝试解决一个问题,当用户搜索该搜索是否有效时,我想在我的 URL 中获取该搜索 = var_X
,例如:>
www.website.com/search/var_X
或类似的东西,
www.website.com/search/<df.item>
视图.py
def views_search(request):
temp_dict = {}
if request.method == 'POST':
var_X = request.POST['var_X']
try:
df = wsc.Summary(temp_dict,var_X)
except Exception as e:
df = "ERROR"
return render(request,'search.html',{'df' : df})
else:
return render(request,'home.html',{'var_X' : "Not Found"})
网址
from django.urls import path
from . import views
from requests import *
urlpatterns = [
path('search/<var_X>',views.views_search,name="url-search"),]
HTML
<form action="{% url 'url-search' var_X %}"class="d-flex" method="POST">
{% csrf_token %}
<input class="form-control me-2" type="search" placeholder="Enter String" aria-label="Search" name="var_X">
<button class="btn btn-outline-secondary" type="submit">Search</button>
</form>
解决方法
当 Django 呈现模板时,它会将所有模板标签转换为 html。
您将无法在客户端使用 Python 代码在 var_X
中设置 {% url 'url-search' var_X %}
的值。
我的建议是使用 javascript 通过 onclick
html 属性设置表单的操作。
<button ... onclick="this.form.action = {% url 'url-search' %} + document.getElementById('id-of-input-element').value;>"
这也意味着从 input 元素中删除 action
属性。
来自
<form action="{% url 'url-search' var_X %}"class="d-flex" method="POST">
到
<form class="d-flex" method="POST">
因为我不知道您的代码是做什么的(因为我不知道 df
是什么。使用以下仅作为您可以实现的示例。
(在我的代码片段中,输入搜索会返回到同一页面以显示结果。)
urls.py
urlpatterns = [
path('search/',views.views_search,name="url-search"),path('search/<str:var_X>',views.views_search)
]
需要路由 'search/'
才能使 {% url 'url-search' %}
在第一页加载时工作。
路由 'search/<str:var_X>'
将 search/
之后的任何值作为视图函数中的字符串匹配到名为 var_X
的变量中。
views.py
def views_search(request,var_X=None):
if request.method == 'POST':
pass
# do the stuff you need to do with the form..
return render(
request,"views_search.html",{
'var_X': var_X
}
)
参数 var_X
默认为 None
,如果 url 在 search/
之后没有任何内容,否则它将包含搜索字符串。
views_search.html
(wtv 你的 html 模板被调用)
<form class="d-flex" method="POST">
{% csrf_token %}
<input id="search_input" class="form-control me-2" type="search" placeholder="Enter String" aria-label="Search" name="var_X" value="">
<button class="btn btn-outline-secondary" type="submit" onclick="this.form.action = {% url 'url-search' %} + document.getElementById('search_input').value;">Search</button>
</form>
{% if var_X %}
<p>Showing results for '{{ var_X }}'.</p>
{% endif %}
使用上面的 html 你会得到这个输出:
在按下搜索按钮之前
按下搜索按钮后
这样做的另一个好处是,如果您直接在 url 中输入内容,它也会搜索该内容。
希望这有助于为您寻找正确的方向。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。