在不使用表单的情况下在django模板中获取用户输入的变量

时间:2011-09-23 06:27:58

标签: django django-templates django-views django-urls

我有一个django模板,它也有一个div元素,它接受user_inputed值。 输入值后,我调用一个javascript函数,如onSubmit(user_input)

<input type="text" class= "inputtext" onKeyPress="return onSubmit(this.value)">

现在在这个onSubmit()函数中,它现在具有用户输入的值user_input,我希望能够将url模式直接用于视图,例如

function onSubmit(user_input) {window.location = "{% url myview user_input %}";}

这里的问题是,由于加载模板时user_input为空,因此url-view反向查找会产生错误。有没有办法只在调用onSubmit函数时触发此查找。

我知道形式是另一种选择,但对于这种情况来说,这感觉就像是一种矫枉过正。

1 个答案:

答案 0 :(得分:1)

您可以通过AJAX获取网址:

views.py:

def get_url(request):
    name = request.GET.get('name')
    args = reguest.GET.get('args', [])
    kwargs = request.GET.get('kwargs', {})
    try:
        url = django.core.urlresolvers.reverse(name, args=args, kwargs=kwargs)
    except NoReverseMatch:
        url = None
    return django.http.HttpResponse(url)

urls.py

#...
('^url$', get_url)
#...

JS:

function onSubmit(user_input) {
    var args = [user_input];
    jQuery.get('/url', {'args': args}, function(data) {
        var url = data;
        if (url) {
            window.location = url;
        } else {
            alert('fail');
        }
    });
}

或者,如果您的URL规则足够简单,您可以在解析和URL时使用一些占位符,在提交表单之前,您应该将其替换为实际输入:

var fakeUrl = '{% url myview "%s%" %}';
function onSubmit(user_input) {
    window.location = fakeUrl.replace('%s%', user_input);
}