2017-05-31 49 views
0

我有一個Ajax調用發送一個國家標籤下面我查看功能:重定向到了同樣的觀點,同時改變一個參數

意見

... 
posts = Post.objects.all() 

if request.method == 'POST': 
    country = request.POST.get('country') 
    print('COUNTRY:', country) #successfully prints 
    posts = Post.objects.filter(country=country) 

context = { 
    ... 
    'posts': posts, 
} 

return render(request, 'boxes.html', context) 

我順利拿到了阿賈克斯的數據,但什麼在此之後我要做什麼以便重定向到與新的posts值相同的視圖?

+0

如果調用網址放慢參數在這應該工作你的瀏覽器。如果您通過Ajax獲取它,它將不起作用。爲此,你必須返回一個對象列表(可能在json中?),並使用js在你的網站上呈現它。 – Geotob

+0

這是一個阿賈克斯調用。我試圖把參數放在url中,但我應該如何通過ajax填充參數(在url中)?例如這裏的URL'url(r'^(?P \ w +)/(?P \ w +)/ $',country_filter,name ='country_filter'),'是否可以通過ajax填充'country'? – Zorgan

+0

您不通過ajax填充網址。你可以使用鏈接,或使用'window.location' API。 Ajax從服務器獲取數據,而不是網站進行渲染。 – Geotob

回答

0

如果您使用的是Ajax,您必須使用window.location.reload();中的success方法進行Ajax調用。

+0

但是這並沒有通過視圖,我需要它通過視圖來更改'posts'值。否則它只是重新加載完全相同的頁面 – Zorgan

0

,因爲我讀您正在使用的Ajax: 函數重載@Himanshu杜阿說是確定 我應該檢查你使用的URL和VIEW

# The function reload will work well if you change the DATA 
# and it will reload and return again the New value from data 

或者你應該嘗試的方式用你通過ajax從服務器獲得的新數據代替舊數據(只需使用Jquery更改數值)

0

它不起作用。

在HTML頁面,使用Javascript,你應該:

  • (1)發送一個AJAX調用(GET/POST)來加載視圖功能在 後端
  • (5)接收視圖函數的輸出,並做任何你想要的。

在後端,使用視圖功能,您應該:

  • (2)從前端(HTML)接收的GET/POST數據
  • (3)做任何你想那。
  • (4)使用的HttpResponse

注意的數字旁邊的每個項目返回功能JSON的輸出。它根據從1到5

這裏說 序列發生的情況是一個例子:

  1. 在HTML頁(JavaScript)的:
 

    var posts; 
    $("button").click(function(){ 
     $.post("/test/", function(data, status){ 
      posts = data; 
      console.log(data); 
     }); 
    }); 

  • 在後端(Python)上:
  •  
    
        import json 
        from django.http import HttpResponse 
    
        def test(request): 
         if request.method == 'POST': 
          country = request.POST.get('country') 
          posts = Post.objects.filter(country=country) 
          return HttpResponse(json.dumps(posts)) 
         else: 
          return HttpResponse("error") 
    
    
    +0

    'test()'函數在哪裏?在我的主視圖功能? – Zorgan

    +0

    是的。但是你必須配置路由。你使用Flask還是Django? –

    +0

    我正在使用Django。 – Zorgan

    0

    在您的示例中,視圖返回呈現的模板:boxes.html。對於這個工作,你就必須要麼

    • 修改您的視圖中使用的查詢參數(例如/my/url?country=nowhere)。然後,這將使用GET請求而不是帖子,並且您可以通過URL輕鬆地調用它。

    • 或使用html表單而不是AJAX請求。表單可以輕鬆地POST到端點,它將加載任何您的Web服務器返回的內容。

    Ajax調用被設計爲交換數據與服務器,而不是真正的下載整個網頁。所以,如果你想使用AJAX,你可以把你的觀點返回對象的JSON/XML /不管列表,然後用JS其注入到你的頁面:

    function successCallback(data) { 
        var elem = document.getElementById('myelement'); 
        elem.innerHTML = data; 
    } 
    
    相關問題