如何在用户单击按钮后更改显示的模板?

时间:2014-06-27 15:11:39

标签: django django-templates django-views

我对Django很新,所以如果我犯了愚蠢的错误,我就会大肆宣传 这是我到目前为止的代码:

对于views.py:

def bylog(request):
    if request.POST.get('Filter'):
        return render(request, 'index.html', context)
    filtered_login = Invalid.objects.values_list('login').distinct()
    filtered = []
    for item in filtered_login:
        filtered.append(item[0])
    results = {'results': results, 'filtered': filtered}
    return render(request, 'bylog.html', context)

以下是bylog.html的一小部分:

<select id>"dropdown">
{% for item in filtered %}
    <option value={{ item }}">{{ item }}</option>
{% endfor %}
</select>
<input type="submit" value="Filter" name="Filter" />

我的主要目标是从下拉列表中获取值,在用户单击Filter按钮后,该值将传递到另一个模板。
这甚至可能吗?

谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我的目标基本是我在django中管理POST,这意味着您要将任何数据/变量从模板发送到视图,然后对其进行任何操作(将其发送给另一个模板或商店......)

基本原理是(使用HTML表单,而不是Django表单):

- Create a HTML form in the template 
- Add the selects/inputs with the data you want to manage and a button/input to make the post
- Manage the post in the view

示例

模板表单

<form id="" method="post" action=".">
{% csrf_token %}
<select id="any_name" name="any_name">"dropdown">
{% for item in filtered %}
    <option value={{ item }}">{{ item }}</option>
{% endfor %}
</select>
<input type="submit" value="Filter" name="Filter" />

</form>

<强> view.py

def your_view(request):
    if request.method == 'POST':  # If anyone clicks filter, you receive POST method
        data = request.POST['any_name']
        # Do what you need here with the data
        # You can call another template and send this data
        # You can change any_name for the variable you want, changing the name and id in the select

#Your view code

我建议您阅读Django forms,因为如果您需要更大的表单,要管理包含大量字段的模型的数据,Django Form将为您节省大量时间

Working with Django Forms