根据 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/