получение пользовательской переменной в шаблоне django без использования форм - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть шаблон 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-адресу выдает ошибку. Есть ли способ вызвать этот поиск только при вызове функции onSubmit.

Я знаю, что форма - это альтернатива, но мне кажется, что это будет излишним для этой ситуации.

1 Ответ

1 голос
/ 23 сентября 2011

Вы можете получить URL через 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...