Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当页面在django中刷新时,下拉菜单显示所选项目_Javascript_Jquery_Python_Html_Django - Fatal编程技术网

Javascript 当页面在django中刷新时,下拉菜单显示所选项目

Javascript 当页面在django中刷新时,下拉菜单显示所选项目,javascript,jquery,python,html,django,Javascript,Jquery,Python,Html,Django,有没有一种方法可以使它在使用html下拉表单并且页面在django/python中刷新时,下拉菜单保持在所选过滤器上?这是我目前的表格: <form name="portfolio_filter" action="" method="get"> <select class="orderby pull-right push-bottom" name="orderby" onChange="location = this.options[this.selectedInde

有没有一种方法可以使它在使用html下拉表单并且页面在django/python中刷新时,下拉菜单保持在所选过滤器上?这是我目前的表格:

<form name="portfolio_filter" action="" method="get"> 
    <select class="orderby pull-right push-bottom" name="orderby" onChange="location = this.options[this.selectedIndex].value">
            <option value="">Filter for Products</option>
            <option value="{% url 'products:portfolio_filtered' '-our_rating' %}">Best Match</option>
            <option value="{% url 'products:portfolio_filtered' '-created' %}">Newest</option>
            <option value="{% url 'products:portfolio_filtered' 'title' %}">Sort A-Z</option>
            <option value="{% url 'products:portfolio_filtered' '-title' %}">Sort Z-A</option>
            <option value="{% url 'products:portfolio_filtered' '-unit_price' %}">Price: Highest to Lowest</option>
            <option value="{% url 'products:portfolio_filtered' 'sale_price' %}">Price: Lowest to Highest</option>
    </select>
</form>

产品过滤器
最佳匹配
最新的
排序A-Z
排序Z-A
价格:从高到低
价格:从最低到最高
表单运行良好,让我进入产品组合列表页面,并按标题、评级等进行筛选。但每次我这样做时,下拉列表默认为第一项:

<option value="">Filter for Products</option>
产品过滤器
我希望它停留在所选项目上。因此,如果我转到“评级”,那么当页面重新加载时,它将显示下拉列表中的第一个“评级”过滤器。我相信html是
或类似的东西,我想知道我是否会用Javascript或JQuery填充它?但我不知道怎么做


谢谢

最好通过ajax加载页面,这样表单保持不变,只会重新加载其他部分


如果页面必须重新加载,则使用django会话或django缓存,并在刷新之前将会话或缓存键设置为您选择的值,然后将其检索回来并发送到前端。

我暂时使用django进行此操作。我做了一个口述:

portfolio_filters = {'title': 'Sort A-Z',
                    '-our_rating': 'Best Match', 
                    '-created': 'Newest',
                    'sale_price': 'Price Lowest to Highest'}
然后把这句话输入我的分页视图:

def portfolio_filtered(request, slug):

template_name = 'products/shop-full-width.html'
products_list = Product.objects.order_by(slug)
paginator = Paginator(products_list, 12)
ideas = Idea.objects.all()

try:
    page = int(request.GET.get('page', '1'))
except:
    page = 1

try:
    products = paginator.page(page)
except(EmptyPage, InvalidPage):
    products = paginator.page(paginator.num_pages)

return render_to_response(template_name,
    {'ideas': ideas, 'products': products,
    'portfolio_filters': portfolio_filters, 'slug': slug},
    context_instance=RequestContext(request))
然后在我的模板中,我使用以下For循环/If语句:

<select class="orderby pull-right push-bottom" name="orderby" onChange="location = this.options[this.selectedIndex].value">
        <option value="">Filter for Products</option>
        {% for k, v in portfolio_filters.items %}
            {% if k == slug %}
                <option value="{% url 'products:portfolio_filtered_two' %}/{{ k }}/" selected="selected">{{ v }}</option>
            {% else %}
                <option value="{% url 'products:portfolio_filtered_two' %}{{ k }}/">{{ v }}</option>
            {% endif %}
        {% endfor %}
</select>

你能给我一个如何使用django会话的代码示例吗?我尝试使用render_to_字符串根据选择的过滤器返回html并附加,但到目前为止我无法让它工作。谢谢。最好的选择是使用jquery,而不是重新加载整个页面。或者说,用户从下拉列表中选择一个选项,然后使用Onchange事件和ajax调用将选择的值发送到服务器端,并将值传递到后端。值在控制器使用、缓存或会话变量中发送回后。如request.session['selected\u val']=“selected value”,并在页面刷新后使用request.session['selected\u val']检索它。
url(r'^portfolio/filtered/$', views.portfolio_filtered, name='portfolio_filtered_two'),