【问题标题】:Get a string variable from views to urls in Django在 Django 中从视图到 url 获取字符串变量
【发布时间】:2021-05-17 22:04:45
【问题描述】:

我是 Python 和 Django 的初学者,我正在尝试解决一个问题,即当用户搜索该搜索是否有效时,我想在我的 URL 中获取该搜索 = var_X

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>

【问题讨论】:

    标签: python-3.x django django-views python-requests django-urls


    【解决方案1】:

    当 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 是什么。以下仅作为你可以实现的示例。

    (在我的代码 sn-ps 中输入搜索会返回到同一页面以显示结果。)

    urls.py

    urlpatterns = [
       path('search/', views.views_search, name="url-search"),
       path('search/<str:var_X>', views.views_search)
    ]  
    

    需要'search/' 路由才能使{% url 'url-search' %} 在首页加载时工作。

    路由'search/&lt;str:var_X&gt;'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 中输入内容,它也会搜索该内容。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-04
      • 2011-03-09
      • 2019-01-31
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      相关资源
      最近更新 更多