【问题标题】:Cannot have any URLs with slugs. NoReverseMatch不能有任何带有 slug 的 URL。无反向匹配
【发布时间】:2017-03-15 04:42:38
【问题描述】:

我是一个初学者,在处理 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)。

我想去的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})

我遇到的问题是,通过执行我显示的操作并将该 url 引用放置在我上面显示的那个模板中,我希望能够点击,该模板甚至根本不起作用,给我一个“错误”模板渲染期间的整页错误信息以:

开头

NoReverseMatch 在 /polls/areas/ 未找到带有参数 '('',)' 和关键字参数 '{}' 的 'areadetail' 的反向操作。尝试了 1 种模式:[u'polls/areadetail/(?P[-\w]+)/$']

任何帮助将不胜感激


编辑第 1 部分:正如我在回应 falsetru 时所说,我确信 feature.properties.myslug 实际上有一个 slug 表达式。 EDIT2:根据我在 django 票证中发现的内容,我在 urls.py 中对 url 正则表达式进行了细微更改,从 (?P&lt;areaslug&gt;[-\w]+)/$(?P&lt;areaslug&gt;[-\w]+)?/$,现在错误是:

找不到页面 (404) 请求方式:GET 请求地址:http://127.0.0.1:8000/polls/areadetail// 发起者:polls.views.AreaDetail

是否有可能因为"{% url 'polls:areadetail' feature.properties.myslug%}" 位在 javascript 中,所以没有正确插入该 feature.properties.myslug?像这里需要某种括号吗?

【问题讨论】:

  • 显然feature.properties.myslug 正在评估为None

标签: python django django-views django-urls


【解决方案1】:

经过更多的挖掘,我在另一个问题中找到了为什么这不起作用的答案:

How to pass javascript variable to django custom filter

Ludwik Trammer 的回答是:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我试过了。事实上,如果我删除 {%url...} 并检查页面源,我可以找到 :(...) "Feature", "properties": {"myslug": "an-example" (... ) 其中 'an-example' 是蛞蝓。我什至使用了 javascript alert('feature.properties.myslug');在它的位置并确认了这一点,因为单击后会出现“示例”。就好像 {%url...} 部分只是忽略了我放在那里的任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多