Python 不能有任何带有slug的URL。诺维塞马奇

Python 不能有任何带有slug的URL。诺维塞马奇,python,django,django-views,django-urls,Python,Django,Django Views,Django Urls,我是一个乞丐,很难处理django slug url系统和这些NoReverseMatch错误,即使在阅读文档之后,这些错误对我来说也毫无意义 我有一个django项目。在其中一个视图中,我将geoJSON特性列表传递到模板中,并在地图上显示它们。我想让每一个功能作为一个可点击的“链接”到一个视图,将显示有关它的东西。以下是模板的一部分,其中包含我要单击的功能: //part of the template: <script type="text/javascript"> ... f

我是一个乞丐,很难处理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%}";
        });
     }
我遇到的问题是,通过执行我显示的操作并将url引用放置在我上面显示的模板中,我希望能够单击该模板,该模板甚至无法工作,给我一个“模板呈现过程中出错”的完整页面错误信息,该信息以:

NoReverseMatch位于/投票/区域/ 未找到参数为“(“”,)”且关键字参数为“{}”的“areadetail”的反转。尝试了1个模式:[u'polls/areadetail/(?P[-\w]+)/$”]

任何帮助都将不胜感激


编辑第1部分:正如我在回应falsetru时所说的,我确信feature.properties.myslug实际上包含一个slug表达式。 EDIT2:根据我在django票证中找到的内容,我在url.py的url正则表达式中做了一点小小的更改,从
(?P提出者:polls.views.AreaDetail


是否可能是因为
“{%url'轮询:areadetail”功能.properties.myslug%}”
位在javascript中,该feature.properties.myslug没有正确插入?就像这里需要某种括号一样?

根据错误消息,
feature.properties.myslug
为空或没有值

确保从视图中正确传递了
feature.properties.myslug

  • 暂时注释掉
    {%url..%}
  • 打印
    {feature}
    {{feature.properties}
    {{feature.properties.myslug}}
    ,查看是否缺少哪个零件
  • 相应地修复视图
  • 取消注释
    {%url..%}

在进一步挖掘之后,我在以下位置的另一个问题中找到了为什么这不起作用的答案:

Ludwik Trammer对此的回答是:

Django模板是在服务器端构建的,而JavaScript是在客户端执行的。 这意味着模板代码总是在JavaScript之前执行(如 在将页面发送到客户端之前,它由服务器执行)。 因此,绝对不可能混合使用JavaScript和 Django按照您想要的方式编写代码


这显然适用于这里。我专注于URL模板的问题,URL.py文件上的regex等。问题是,无论我做什么,因为它在javascript部分,运行客户端,URL模板总是不完整的,无论我做什么,因此是我想要的不可能的解决方案。

显然
 feature.properties.myslug
的计算结果为
None
。我已经尝试过了。事实上,如果我删除{%url…}并检查页面资源,我可以找到:(…)“feature”,“properties”:{“myslug”:“an example”(…)其中“an example”是slug。我甚至使用了javascript警报('feature.properties.myslug'));在它的位置上,它确认了这一点,正如单击后出现的“示例”。就好像{%url…}部分忽略了我在其中输入的任何内容。
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})