簡體   English   中英

Django:傳遞不在URL內的參數

[英]Django: passing parameters not inside the URL

現在,我的結果網址非常長,基本上是一長串參數。 我通過按一個按鈕和(JavaScript)導航到結果:

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

像這樣捕獲它們(views.py):

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

如何不在URL內發送這些相同的參數,以及如何在視圖中捕獲它們?

編輯:

為了明確起見,在理想的情況下,我想發送對用戶和搜索引擎搜尋器隱藏的參數,以便用戶/搜尋器僅看到URL:

www.example.com/results

我做類似的事情:

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

當需要隱藏參數時,應發送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

如果您想使用javascript發送POST請求,請閱讀此處: 使用Javascript觸發事件發送HTTP Post

您可以在GET字典中訪問url參數

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

在視圖中:

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

如果這些參數是可選的,則需要使用默認值,例如:

parm1 = request.GET.get('parm1',None)

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

如果參數太多,請檢查視圖和url,也許可以將某些參數轉換為url捕獲的args。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM