在 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 中输入内容,它也会进行搜索。

希望这有助于引导您朝着正确的方向寻找您正在寻找的东西。