我是一个抓住稻草的乞丐,难以处理django slug url系统和这些NoReverseMatch错误,即使在阅读完文档之后对我也毫无意义。
我有一个django项目。在其中一个视图中,我将geoJSON功能列表传递到模板中,并在地图上显示它们。我希望每个功能都可以作为一个可点击的链接'一个将显示它的东西的视图。以下是具有我想要点击的功能的模板的一部分:
//part of the template:
<script type="text/javascript">
...
function onEachFeature(feature, layer) {
layer.on('click', function (e) {
window.location.href = "{% url 'polls:areadetail' feature.properties.myslug%}";
});
}
(我已经确认feature.properties.myslug确实包含了我想要的slug。)
我想去的网址格式:
urlpatterns = [...
url(r'^areadetail/(?P<areaslug>[-\w]+)/$', views.AreaDetail, name='areadetail'),]
与之相关的观点:
def AreaDetail(request, areaslug):
area = get_object_or_404(Area, nameslug=areaslug)
return render(request, 'polls/areadetail.html', {'area':area})
我得到的问题是,通过执行我展示的内容并将该url引用放在我上面显示的模板中,我希望能够点击,该模板甚至根本无法工作,给我一个&#39;模板渲染过程中的错误&#39;以:
开头的整页错误信息/ polls / areas /的NoReverseMatch 反向&#39; areadetail&#39;有参数&#39;(&#39;&#39;,)&#39;和关键字参数&#39; {}&#39;未找到。尝试了1种模式:[u&#39;民意调查/ areadetail /(?P [ - \ w] +)/ $&#39;]
非常感谢任何帮助
编辑第1部分:正如我在回复falsetru时所说的那样,我确定feature.properties.myslug实际上已经有了一个slug表达式。
EDIT2 :根据我在django机票中找到的内容,我在urls.py的网址正则表达式略有变化,从(?P<areaslug>[-\w]+)/$
到(?P<areaslug>[-\w]+)?/$
并且现在错误是:
找不到页面(404) 请求方法:GET请求URL:http://127.0.0.1:8000/polls/areadetail//提出者:polls.views.AreaDetail
是否可能因为"{% url 'polls:areadetail' feature.properties.myslug%}"
位在javascript中,那个feature.properties.myslug没有正确插入?像这里需要某种括号吗?
答案 0 :(得分:1)
根据错误消息,feature.properties.myslug
为空或没有值。
确保从视图中正确传递feature.properties.myslug
。
{% url .. %}
。{{ feature }}
,{{ feature.properties }}
,{{ feature.properties.myslug }}
以查看哪个部分缺失。{% url .. %}
。答案 1 :(得分:1)
经过多次挖掘后,我发现了为什么在另一个问题中无法解决这个问题的答案:
Ludwik Trammer的回答是:
Django模板构建在服务器端,而JavaScript则在客户端执行。 这意味着模板代码总是在JavaScript之前执行(如 它在服务器执行之前,在页面发送到客户端之前)。 因此,绝对不可能混合使用JavaScript和 Django以你想要的方式编码。
这里明显适用。我专注于URL模板的问题,urls.py文件上的正则表达式等问题,无论我做了什么,因为它在javascript部分,运行客户端,该URL模板将无论我做什么,总是不完整的,因此对我想要的东西来说是不可能的解决方案。