不能有任何带有slugs的URL。 NoReverseMatch

时间:2016-11-01 23:40:49

标签: python django django-views django-urls

我是一个抓住稻草的乞丐,难以处理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没有正确插入?像这里需要某种括号吗?

2 个答案:

答案 0 :(得分:1)

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

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

  • 暂时评论{% url .. %}
  • 打印{{ feature }}{{ feature.properties }}{{ feature.properties.myslug }}以查看哪个部分缺失。
  • 相应地修复视图。
  • 取消注释{% url .. %}

答案 1 :(得分:1)

经过多次挖掘后,我发现了为什么在另一个问题中无法解决这个问题的答案:

  

How to pass javascript variable to django custom filter

Ludwik Trammer的回答是:

  

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

这里明显适用。我专注于URL模板的问题,urls.py文件上的正则表达式等问题,无论我做了什么,因为它在javascript部分,运行客户端,该URL模板将无论我做什么,总是不完整的,因此对我想要的东西来说是不可能的解决方案。