【问题标题】:Use query result from semantic UI inside Django URL Template tag在 Django URL 模板标签内使用语义 UI 的查询结果
【发布时间】: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(虚拟主机)有点不同,我每次都必须更改它。

【问题讨论】:

  • 其实我想要的有点不一样。我想在 Django 模板标签中包含一个 Javascript 变量。但问题是这个变量有括号。
  • 如果{query} 是一个JavaScript var,那么你不能做你期望的事情,因为那个var“存在”只在渲染时间,我的意思是,当HTML(服务器发送)是由浏览器解析和运行。注意模板标签是在服务器端执行的。

标签: django django-templates semantic-ui


【解决方案1】:

你的代码有两个问题:

  1. {query} 周围没有引号,因此 Django 不会将其视为字符串
  2. 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}')
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 2021-11-01
      • 1970-01-01
      • 2021-12-05
      • 2012-03-31
      • 2022-11-25
      • 2011-10-07
      相关资源
      最近更新 更多