使用Django URL Template标签内的语义UI查询结果

时间:2018-06-07 12:03:46

标签: django django-templates semantic-ui

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

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

我想使用网址模板标记系统来指定网址:

{% url 'searchParcelle' {query} %}  

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

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

你知道我怎么解决这个问题吗? 我可以保持这样,但由于我的Prod URL(虚拟主机)有点不同,我每次都要改变它。

2 个答案:

答案 0 :(得分:2)

您的代码存在两个问题:

  1. {query}周围没有引号,因此Django不会将其视为字符串
  2. 网址中的花括号将被转义,从而产生如下网址:/myUrl/%7Bquery%7D/
  3. 此外,您的网址定义可能只允许使用字母数字字符,并且与参数{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
        }       
    });
    

答案 1 :(得分:0)

  

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

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

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