保持与django输出相同的html页面

时间:2017-07-13 00:30:13

标签: html django

我希望用户在下拉菜单中选择少数产品,并根据该显示在同一页面上显示图表。用户应该能够从下拉菜单中再次选择/取消选择选项,然后刷新它,我想要保留在同一页面中。 My requirement

我已经编写了代码,但是因为对于django中的单独视图,我必须有一个不同的url,它会转到我的下拉菜单不再有效的指定url。

我已经使用上下文渲染了相同的显示页面,只是我的网址不同。

我如何让它工作并保持相同的网址。如果可能,请使用输出数据重新加载同一页面。以下是我的代码。

的index.html:

<div class="container">
    <div class="row">
        <div class="col-md-6">
            <h3>Select products:</h3>
            <form id="selectProduct" role="search" method="get" action="{% url 'selectedproducts' %}">
                <select name="parameters[]" data-placeholder="Choose products" class="chosen-select" multiple tabindex="4">
                    {% for p in productnames %}
                        <option value="{{ p.productname }}"> {{ p.productname }} </option>
                    {% endfor %}
                </select><br/>
                <label for="submit"></label><button id="submit" type="submit" class="btn btn-default">Submit</button>
            </form>
        </div>
    </div>
    <div class="row"></div><br />
        <h3> Distribution of sales in the products:</h3>
    </div>
</div>
<p>{{ productList }}</p>

urls.py

url(r'^products/', views.productList, name='index'),
url(r'^selectedproducts/', views.selectedproducts, name='selectedproducts')

view.py

def productList(request):
    productnames = Products.objects.all()
    context = {
        'productnames': productnames,
    }
    return render(request, 'sales/index.html', context)

def selectedproducts(request):
    p = request.GET.getlist('parameters[]')
    context = {
        'productList': p,
    }
    # --- logic later for chart ------
    return render(request, 'sales/index.html', context)

提前致谢。

1 个答案:

答案 0 :(得分:2)

<form id="selectProduct" role="search" method="get" action="{% url 'selectedproducts' %}">更改为&lt; form id="selectProduct" role="search" method="get" action="{% url 'index' %}">并混合两个函数,如

def productList(request):
    if request.method == 'GET':
        p = request.GET.getlist('parameters[]')
        k = request.GET('parameters[]')
        productnames = Products.objects.all()
        context = {
            'productList': p, 'productnames': productnames, 'k':k,
        }
        # --- logic later for chart ------    
    else:

        productnames = Products.objects.all()
        context = {
            'productnames': productnames,
        }

    return render(request, 'sales/index.html', context)

这将返回到同一页面,如果方法存在,则再次使用selectproduct显示表单,如果不只是显示表单。如果这解决了您的问题,请告诉我

在模板中修改

<div class="container">
    <div class="row">
        <div class="col-md-6">
            <h3>Select products:</h3>
            <form id="selectProduct" role="search" method="get" action="{% url 'selectedproducts' %}">
                <select name="parameters[]" data-placeholder="Choose products" class="chosen-select" multiple tabindex="4">
                    {% for p in productnames %}
                        {% if k == p %}
                            <option value=="{{ p.productname }}" selected> {{ p.productname }} </option>
                        {% else%} 
                            <option value="{{ p.productname }}"> {{ p.productname }} </option>
                        {% endif %}
                    {% endfor %}
                </select><br/>
                <label for="submit"></label><button id="submit" type="submit" class="btn btn-default">Submit</button>
            </form>
        </div>
    </div>
    <div class="row"></div><br />
        <h3> Distribution of sales in the products:</h3>
    </div>
</div>
<p>{{ productList }}</p>