【问题标题】:Python Django Getting user inputPython Django 获取用户输入
【发布时间】:2016-10-01 07:34:57
【问题描述】:

我正在设置一个简单的 html 页面,该页面捕获用户输入的信息,并根据用户输入的信息创建一个新页面。问题是我无法取回用户在后台输入的信息,我不明白我哪里出错了。

我的视图文件是这样设置的:

def suggestion(request):  
    if request.method == 'POST':
        form = BusinessName(request.POST)
        if form.is_valid():
            data=form.cleaned_data  
            context = insert_function_here(data)
            return render( request,'mainpage.html', context)
    else:
        form = BusinessName()  
        context = {'form':form}
        return render( request,'mainpage.html', context) 

我的 forms.py 是这样设置的:

class BusinessName(forms.Form):
    business_name = forms.CharField(widget = forms.HiddenInput(), required = False)

我的html相关部分是这样设置的:

<form id="user_input_form" method="post" action="http://127.0.0.1:8000/textinsighters/suggestion">
    Enter Your Business Name : <input type="text" list="browsers" name="browser" id="user_input">
    {% csrf_token %}
    {{ form }}
      <datalist id="browsers">
        <option value="Internet Explorer">
        <option value="Firefox">
        <option value="Chrome">
        <option value="Opera">
        <option value="Safari">
      </datalist>
      <button onclick="myFunction()">Submittt</button>
</form>
<script>
    function myFunction() {
document.getElementById("id_business_name").value = document.getElementById("user_input").value;                                            
document.getElementById("user_input_form").submit();
    }
</script>

我想要一个自动完成列表,这就是我在 html 中创建表单的原因。我得到用户输入,将 Django 表单字段的值设置为用户输入的值并提交。我应该取回一些东西,但视图中的变量“数据”不包含用户输入。

谢谢

【问题讨论】:

    标签: python django


    【解决方案1】:

    您正在使用 forms.HiddenInput() 作为小部件,然后自己添加表单字段。这种方式行不通。如果将字段类更改为 TextInput 会怎样:

    class BusinessName(forms.Form):
        business_name = forms.CharField(widget = forms.TextInput())
    

    如果您的目标是向小部件添加自定义属性,则可以通过提供 attrs 字典来完成:

    class BusinessName(forms.Form):
        business_name = forms.CharField(widget = forms.TextInput(attrs={
            'list': 'browser'
        }))
    

    或者您可以查看django-widget-tweaks 包以在模板中添加属性。

    【讨论】:

    • 谢谢,完美运行。是否可以在 forms.py 文件中定义列表或需要在 html 中定义?我的列表会很大,比如 100 个选项,这就是我想要自动完成功能的原因。还是有更好的方法来实现这一点?
    • 如果您的列表可以变大,解决此问题的一种方法是创建一个 forms.CharField() 并使用 API 源进行搜索以填充该字段。 Python/Django 应该可以轻松管理多达 1k 个选项,但除此之外,搜索 API 会很有趣。如果答案对您有所帮助,请随时投票并接受它:-)
    猜你喜欢
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2020-10-04
    相关资源
    最近更新 更多