Django:传递不在URL内的参数

时间:2016-02-16 13:20:00

标签: django

现在我的结果有一个很长的网址,基本上是一长串的参数。我按下按钮和(JavaScript)导航到结果:

public static string getResource(string key)
{
    return HttpContext.GetGlobalResourceObject("_20160216_tranlation", key).ToString();
}

像这样捕捉它们(views.py):

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

如何在URL内部发送这些相同的参数,如何在视图中捕获它们?

编辑:

为了澄清,在一个最佳的世界中,我想发送隐藏在用户和搜索引擎抓取工具中的参数,以便用户/抓取工具只能看到网址:

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

我做的事情如下:

www.example.com/results

2 个答案:

答案 0 :(得分:2)

当您需要隐藏参数时,您应该发送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 Sending an HTTP Post using Javascript triggered event

发送POST请求,请在此处阅读

答案 1 :(得分:0)

您可以访问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

当您有太多参数时,请检查您的视图和网址,也许您可​​以将一些参数转换为网址捕获的参数。