【问题标题】:Django - parameters in view and not in urlsDjango - 视图中的参数而不是网址中的参数
【发布时间】:2015-04-07 16:36:02
【问题描述】:

我有这个代码:

我的看法:

members_pj(request,lesc,p,np):
    ...

我的模板:

... href="{% url 'members_pj' lesc p np %}" ...

还有我的网址:

url(r'^lesps/(?P<np>\w+)/members','members_pj', name="memberspj"), ...

事实上,我不希望 url 中有参数 lesc 和 p ......只是 np. 是怎么做到的?

谢谢

【问题讨论】:

  • 那么其他参数从哪里来?
  • 视图中使用的其他参数

标签: django django-views django-urls


【解决方案1】:

Django 的 url 标签将视图名称和参数反转为 url,这意味着 url 配置必须与视图的参数一致。我认为您目前拥有的会导致NoReverseMatch django 错误。为避免这种情况,请将您的 url 配置更改为:

url(r'^lesps/(?P<lesc>\w+)/(?P<p>\w+)/(?P<np>\w+)/members','members_pj', name="memberspj"), ...

这将使链接通过 url 配置解析到正确的视图。

但是,接下来是您不希望参数显示在您的 url 中。通常,GET 请求(单击链接时发出的请求)没有正文,这意味着所有内容都在标头或 url 中。如果您想通过该信息发送该信息,但在 url 中没有,则需要使用 javascript 来构造请求。这是一个例子:

在你看来:

<a href="{% url 'members_pj' np %}" data-lesc="{{lesc}}" data-p="{{p}}">
    Content
</a>

在javascript中:

// From http://stackoverflow.com/a/133997/1467342
function post(path, params, method) {
    method = method || "post"; // Set method to post by default if not specified.

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
         }
    }

    document.body.appendChild(form);
    form.submit();
}

var links = document.querySelectorAll('a');
for (var i = 0; i < links.length; i++) {
    links[i].addEventListener('click', function (evt) {
        evt.preventDefault();
        post(this.getAttribute('href'), {
            lesc: this.getAttribute('data-lesc'),
            p: this.getAttribute('data-p')
        });
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2017-12-13
    • 1970-01-01
    相关资源
    最近更新 更多