[英]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.