python - Django 中是否存在导致此 'NoReverseMatch' 的类型差异?

标签 python django django-urls

根据 Django 文档,当“无法根据提供的参数识别 URLconf 中的匹配 URL”时,就会发生 NoReverseMatch。

我收到以下 NoReverseMatch 错误。我的问题是:为什么提供的参数没有被 url 捕获?它是否需要不同类型的参数?我对 Django url 仍然不太满意。

"Reverse for 'recall' with arguments '(<Unordered_Group: countries>,)' and keyword arguments '{}' not found. 0 pattern(s) tried: []"

本题由Django NoReverseMatch url issue修改而来在尝试了建议后。

编辑:

images/urls.py(项目级别)

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^images/', include('images_app.urls', namespace="images_app")),
    url(r'^associate/', include('associate.urls', namespace="associate")),
    url(r'^admin/', include(admin.site.urls)),
)

关联/urls.py

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^learn/', "associate.views.learn", name='learn'),
    url(r'^recall/(?P<ordered_group>\w+)', 'associate.views.recall', name='recall'),
    url(r'^$', "associate.views.index", name='index'),
)

学习.html

<form action="{% url 'associate:recall' ordered_group %}" method="post">   ERROR CAUGHT 
    {% csrf_token %}

    <div>
        <label for="recall">enter as many members of {{ ordered_group }} as you can recall </label>
        <input type="text" id="recall" name="recall">
    </div>
    <div id="enter_button">
        <input type="submit" value="enter" name="enter" />
    </div>
    <div id="done_button">
        <input type="submit" value="done" name="done" />
    </div>
</form>

View .py

def recall(request, ordered_group):
  ...


def learn(request):
... 
ordered_group = ordered_groups[index]

 return render(request, 'associate/learn.html', {'dataset':model, 'ordered_group':ordered_group})

最佳答案

问题是,您的 URL 模式需要一个与 [\w]+ 匹配的正则表达式,其中 [\w]+ 是一个或多个单词字符。

recall/(?P<ordered_group>\w+)

但它实际上得到了一个对象。

更好的方法是发送有序组对象的 id(或任何其他唯一标识符),并再次在 View 中查询该对象。

请注意,如果您使用 id,URL 模式正则表达式将为

recall/(?P<ordered_group>\d+)

和 View :

def recall(request, ordered_group):
    obj = get_object_or_404(Unordered_Group, id=ordered_group)
    #rest of the code.. 

关于python - Django 中是否存在导致此 'NoReverseMatch' 的类型差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938352/

相关文章:

Python:如何修改 for 循环中交替键的字典值?

python - 从 Json 在 Python 中创建具有多个键值的嵌套 Json 结构

python - 基于多个条件处理 numpy 数组的更有效方法是什么?

python - 让 virtualenv 从你的全局站点包中继承特定的包

python - 带有外键的 scrapy djangoitem

python - 在列表中查找属性等于某个值的对象(满足任何条件)

python - Django:检查图像是否存在于某个特定的 url

python - 错误: 'NameError: name ' terms_and_conditions' is not defined' when it is

python - django从url查找对象

python - 匹配 URL 中的点时出现奇怪的 Django 行为