在 Django URL 模板标签内使用语义 UI 的查询结果

Posted

技术标签:

【中文标题】在 Django URL 模板标签内使用语义 UI 的查询结果【英文标题】:Use query result from semantic UI inside Django URL Template tag 【发布时间】:2018-11-17 08:09:21 【问题描述】:

我正在使用 Django 和 semantic UI 创建一个搜索框。除了URL 参数外,一切正常。

$('.ui.search').search( 
        type          : 'standard',
        minCharacters : 2,              
        apiSettings   : 
            onResponse: function(parcelleResponse)                         
                //DO Something
                return response;
            ,
            url: "/myUrl/query"
               
    );

我想使用 URL 模板标签系统来指定 URL:

% url 'searchParcelle' query %  

但由于语义 UI 返回的结果存储在变量 query 中,我遇到了模板错误:

Could not parse the remainder: 'query' from 'query'

你知道我该如何解决吗? 我可以保持这样,但由于我的 Prod URL(虚拟主机)有点不同,我每次都必须更改它。

【问题讨论】:

Use Django template tags in jQuery/javascript?的可能重复 其实我想要的有点不一样。我想在 Django 模板标签中包含一个 Javascript 变量。但问题是这个变量有括号。 如果query 是一个JavaScript var,那么你不能做你期望的事情,因为那个var“存在”只在渲染时间,我的意思是,当html(服务器发送)是由浏览器解析和运行。注意模板标签是在服务器端执行的。 【参考方案1】:

你的代码有两个问题:

    query 周围没有引号,因此 Django 不会将其视为字符串 URL 中的大括号将被转义,从而产生如下 URL:/myUrl/%7Bquery%7D/

此外,您的 URL 定义可能只允许使用字母数字字符,并且与参数 query 不匹配。

这样做的正确方法是获取 URL 模式并将其转换为模板 URL 格式,但这需要深入了解 Django 的 URL 解析内部,并且可能不值得这么麻烦。

更实用的方法是使用占位符反转 URL,然后在 JavaScript 中替换。

var url = "% url 'searchParcelle' 'QUERYPLACEHOLDER' %".replace(
    'QUERYPLACEHOLDER', 'query'
)
$('.ui.search').search( 
    type          : 'standard',
    minCharacters : 2,              
    apiSettings   : 
        onResponse: function(parcelleResponse)                         
            //DO Something
            return response;
        ,
        url: url
           
);

【讨论】:

【参考方案2】:

更实用的方法是将 URL 反转为 占位符,然后在 JavaScript 中替换它。

事实上,我完全按照您的建议做了,现在按预期工作!感谢您的帮助 Daniel Hepper。

_urlSearch  = "% url 'search'  '--MySearchValue--' %";
_urlDisplay = "% url 'display' '--MySearchValue--' %";    
$('.ui.search').search( 
 ...
 url: _urlSearch.replace('--MySearchValue--', 'query')
);

【讨论】:

以上是关于在 Django URL 模板标签内使用语义 UI 的查询结果的主要内容,如果未能解决你的问题,请参考以下文章

模板标签内的Django字符串连接最佳实践

django 模板标签 url 仅在最后一个空 url 模式时有效

django url 模板标签的问题,% url %

使用带有特殊字符的 Django 的 url 模板标签

Django:如何使用模板变量和 url 标签

使用 django 模板标签修改 url