在 Django 中获取从视图到 url 的字符串变量
Get a string variable from views to urls in Django
我是 Python 和 Django 的初学者,我正在尝试解决一个问题,即当用户搜索该搜索是否有效时,我想获得该搜索 = var_X
,在我的 URL 喜欢:
www.website.com/search/var_X
或类似的东西,
www.website.com/search/<df.item>
Views.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 代码在 {% url 'url-search' var_X %}
中设置 var_X
的值。
我的建议是使用 javascript 通过 onclick
html 属性设置表单的操作。
<button ... onclick="this.form.action = {% url 'url-search' %} + document.getElementById('id-of-input-element').value;>"
这也意味着从输入元素中删除 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)
]
为了使 {% url 'url-search' %}
在第一页加载时工作,需要路由 '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
(调用你的 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 中输入内容,它也会进行搜索。
希望这有助于引导您朝着正确的方向寻找您正在寻找的东西。
我是 Python 和 Django 的初学者,我正在尝试解决一个问题,即当用户搜索该搜索是否有效时,我想获得该搜索 = var_X
,在我的 URL 喜欢:
www.website.com/search/var_X
或类似的东西,
www.website.com/search/<df.item>
Views.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 代码在 {% url 'url-search' var_X %}
中设置 var_X
的值。
我的建议是使用 javascript 通过 onclick
html 属性设置表单的操作。
<button ... onclick="this.form.action = {% url 'url-search' %} + document.getElementById('id-of-input-element').value;>"
这也意味着从输入元素中删除 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)
]
为了使 {% url 'url-search' %}
在第一页加载时工作,需要路由 '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
(调用你的 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 中输入内容,它也会进行搜索。