我有一个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函数时触发此查找。
我知道形式是另一种选择,但对于这种情况来说,这感觉就像是一种矫枉过正。
答案 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);
}