2016-02-16 63 views
-1

現在我有一個非常長的URL,我的結果基本上是一長串參數。我瀏覽到的結果通過一個按鈕(JavaScript的)發稿:Django:傳遞不在URL內的參數

window.location.href = ... URL with parameters here ...; 

追趕他們像這樣(views.py):

def Results(request,parameter1,...,parameterN) 

我怎麼不發送URL裏面這些相同的參數我如何看待他們?

編輯:

爲了澄清,在最佳的世界,我要寄對用戶隱藏的參數和搜索引擎抓取工具,使用戶/網絡爬蟲只能看到的網址:

www.example.com/results 

我做這樣的事情:

def Results(request): 
    parameter1 = ??? 
    parameter2 = ??? 
    ... 
    parameterN = ??? 
+0

很難說沒有清晰的例子(IMO),你爲什麼需要那麼多的參數?他們都需要嗎? – Sayse

+1

你到底想要什麼,並指定你正在使用的方法(GET或POST)。 – Kjjassy

+0

@Sayse所有參數都是必需的。結果頁面使用所有這些(物理數據)進行計算。 – user1581390

回答

1

當您需要隱藏參數時,您應該發送POST請求。要使用POST方法發送參數,可以使用html form元素或javascript發送它們。例如,您可以用form這樣傳遞參數:

<form id="my_form" action="/results" method="POST"> 
    {% csrf_token %} 
    <input type="hidden" name="param1" value=""/> 
    <input type="hidden" name="param2" value=""/> 
    <input type="hidden" name="param3" value=""/> 
</form> 

填充隱藏在JavaScript input內容是這樣的:

var my_form = document.forms['my_form']; 
my_form.elements["param1"].value = "Some Value1"; 
my_form.elements["param2"].value = "Some Value2"; 
my_form.elements["param3"].value = "Some Value3"; 

,並提交表單中的javascript:

document.getElementById("my_form").submit(); 

然後訪問參數view

def Results(request): 
    if request.method == "POST": 
     parameter1 = request.POST.get("param1", None) 
     parameter2 = request.POST.get("param2", None) 
     parameter3 = request.POST.get("param3", None) 
    else: 
     # handle get request 

在這裏閱讀,如果你想發送POST要求使用javascript:Sending an HTTP Post using Javascript triggered event

0

您訪問的GET字典中的URL參數

www.example.com/?parm1=baz&&parm2=baz 

在視圖:

def ViewFunction(request): 
    parm1 = request.GET['parm1'] 
    parm2 = request.GET['parm2'] 

如果這些參數都是可選的,你會想使用默認的,如:

​​

注意的GET參數並不安全。在代碼中使用它們之前,您應該正確地轉義它們。一個簡單的解決方案是使用django表單,將GET值傳遞給表單,然後使用form.cleaned_data

如果參數太多,請檢查您的視圖和網址,也許可以將一些參數轉換爲網址捕獲的參數。

+0

但是,如何在沒有包含參數的長URL的情況下發送它們? – user1581390