時間:2023-05-24 08:51:01 | 來源:網(wǎng)站運營
時間:2023-05-24 08:51:01 來源:網(wǎng)站運營
Django-從0到1寫出一個全面的網(wǎng)頁(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>
應(yīng)該前面就加過了,不過以防萬一,就再次申明下。<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>
顯示效果:# 下面這一行我們先前已經(jīng)加上了,不過以防萬一,還是寫在這了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)
在檢查代碼時,我們將看到上面的代碼只允許經(jīng)過身份驗證的用戶表示他們喜歡某個類別。上面這個視圖假設(shè)我們通過GET 傳遞了一個變量category_id,目的是讓我們能夠識別要更新的類別。在這個視圖中,如果我們愿意,我們還可以跟蹤并記錄某個用戶“喜歡”的這個類別——但在這兒,我們?nèi)匀幌M3趾唵?,只關(guān)注AJAX 機制。path('like_category/', views.like_category, name='like_category'),
現(xiàn)在,當(dāng)我們登錄之后,效果如下圖:$('#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,然后發(fā)出AJAX GET 請求,該請求將調(diào)用/eva/like_category/ 對請求中的category_id 進(jìn)行編碼。如果請求成功,那么id 為like_count 的HTML 元素將會更新請求返回的數(shù)據(jù),并隱藏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 創(chuàng)建建議類別視圖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 是我們先前就創(chuàng)建好的文件,如果有忘記掉它存在的,可以打開看看。path('suggest_category/', views.suggest_category, name='suggest_category'),
3.4 更新基礎(chǔ)模板<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,我們將在其中顯示響應(yīng)。我們不需要添加按鈕,因為我們將在keyup 上添加一個事件處理程序到發(fā)送建議請求的輸入框。$('#suggestion').keyup(function(){ var query; query = $(this).val(); $.get('/eva/suggest_category/', {suggestion: query}, function(data){ $('#cats').html(data); });});
現(xiàn)在的效果展示如下:[29/Aug/2018 22:02:32] "GET /eva/suggest_category/?suggestion=django HTTP/1.1" 200 77
關(guān)鍵詞:
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。