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

发布于 2024-12-05 20:07:00 字数 522 浏览 0 评论 0原文

我有一个 django 模板,其中还有一个接受 user_inputed 值的 div 元素。 输入值时,我调用一个 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 函数时触发此查找。

我知道形式是一种选择,但感觉对于这种情况来说它有点过分了。

I have a django template which also has a div element that takes in a user_inputed value.
When the value is entered, I call a javascript function say onSubmit(user_input)

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

Now in this onSubmit() function which now has the user-inputted value user_input, I want to be able to use url patterns to a direct to a view, like

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

The problem here is that since user_input is empty when the template is loaded, the url-view reverse lookup gives an error. Is there a way to trigger this lookup only when the onSubmit function is called.

I know form is an alternative, but it just feels like it'll be an overkill for this situation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

再浓的妆也掩不了殇 2024-12-12 20:07:00

你可以通过 AJAX 获取 URL:

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

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);
}
, get_url) #...

js:

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

You can get the URL via 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

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');
        }
    });
}

Alternatively, if your URL rule is simple enough, you can use some placeholder when resolving and URL, and before submitting the form you should replace it with real input:

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

js:

Alternatively, if your URL rule is simple enough, you can use some placeholder when resolving and URL, and before submitting the form you should replace it with real input:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文