时间:2023-05-24 08:51:01 | 来源:网站运营
时间:2023-05-24 08:51:01 来源:网站运营
Django-从0到1写出一个全面的网页(14)AJAX:<script src="{% static "js/jquery-2.1.1.js" %}"></script><script src="{% static "js/rango-jquery.js" %}"></script><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
应该前面就加过了,不过以防万一,就再次申明下。<p><strong id="like_count">{{ category.likes }}</strong> people like this category{% if user.is_authenticated %} <button id="likes" data-catid="{{category.id}}" class="btn btn-primary" type="button"> <span class="glyphicon glyphicon-thumbs-up"></span> Like </button>{% endif %}</p>
显示效果:# 下面这一行我们先前已经加上了,不过以防万一,还是写在这了from django.contrib.auth.decorators import login_required@login_requireddef like_category(request): cat_id = None if request.method == 'GET': cat_id = request.GET['category_id'] likes = 0 if cat_id: cat = Category.objects.get(id=int(cat_id)) if cat: likes = cat.likes + 1 cat.likes = likes cat.save() return HttpResponse(likes)
在检查代码时,我们将看到上面的代码只允许经过身份验证的用户表示他们喜欢某个类别。上面这个视图假设我们通过GET 传递了一个变量category_id,目的是让我们能够识别要更新的类别。在这个视图中,如果我们愿意,我们还可以跟踪并记录某个用户“喜欢”的这个类别——但在这儿,我们仍然希望保持简单,只关注AJAX 机制。path('like_category/', views.like_category, name='like_category'),
现在,当我们登录之后,效果如下图:$('#likes').click(function(){ var catid; catid = $(this).attr("data-catid"); $.get('/eva/like_category/', {category_id: catid}, function(data){ $('#like_count').html(data); $('#likes').hide(); });});
上面这段JQuery 代码将向id 为#like 的元素添加一个事件处理程序,即按钮。单击它时,它将从按钮元素中提取类别id,然后发出AJAX GET 请求,该请求将调用/eva/like_category/ 对请求中的category_id 进行编码。如果请求成功,那么id 为like_count 的HTML 元素将会更新请求返回的数据,并隐藏id 为like 的HTML 元素。def get_category_list(max_results=0, starts_with=''): cat_list = [] if starts_with: cat_list = Category.objects.filter(name__istartswith=starts_with) if cat_list and max_results > 0: if cat_list.count() > max_results: cat_list = cat_list[:max_results] return cat_list
3.2 创建建议类别视图def suggest_category(request): cat_list = [] starts_with = '' if request.method == 'GET': starts_with = request.GET['suggestion'] cat_list = get_category_list(3, starts_with) return render(request, 'rango/cats.html', {'cat_list': cat_list })
rango/cats.html 是我们先前就创建好的文件,如果有忘记掉它存在的,可以打开看看。path('suggest_category/', views.suggest_category, name='suggest_category'),
3.4 更新基础模板<div class="col-sm-3 col-md-2 sidebar"> {% block side_block %} </br> </br> {% get_category_list category %} {% endblock %} <ul class="nav nav-list"> <li class="nav-header">Find a Category</li> <form> <label></label> <li><input class="search-query span10" type="text" name="suggestion" value="" id="suggestion" /></li> </form> </ul> <div id="cats"> </div></div>
在这里,我们添加了一个输入框,id="suggestion" 和id="cats" 的div,我们将在其中显示响应。我们不需要添加按钮,因为我们将在keyup 上添加一个事件处理程序到发送建议请求的输入框。$('#suggestion').keyup(function(){ var query; query = $(this).val(); $.get('/eva/suggest_category/', {suggestion: query}, function(data){ $('#cats').html(data); });});
现在的效果展示如下:[29/Aug/2018 22:02:32] "GET /eva/suggest_category/?suggestion=django HTTP/1.1" 200 77
关键词: