在产品型号中,我想按食品标题查询。并返回NoReverseMatch
错误
html url:
<a href="{% url 'product' food_name=catalog.food_name|urlencode %}">some text</a>
views.py:
def product(request, food_name):
product = Catalog.objects.get(food_name=food_name)
return render(request, 'food/product.html', {'product':product})
url.py
url(r'^product/(?P<food_name>\w+)/', food_views.product, name='product'),
微量
NoReverseMatch: Reverse for 'product' with arguments '()' and keyword arguments '{u'food_name': u'%D9%86%D8%A7%D9%86%20%D8%A8%D9%88%D8%B1%DA%A9'}' not found. 1 pattern(s) tried: [u'product/(?P<food_name>\\w+)/']
答案 0 :(得分:3)
删除urlencode
,您不需要它
<a href="{% url 'product' food_name=catalog.food_name %}">some text</a>
当您需要以允许在URL中使用字符串的方式对字符串进行编码时(例如,当您添加get参数时),将使用 urlencode
。上面,您只是将一个字符串参数传递给正在构建URL的函数。
您似乎正在尝试将阿拉伯字符编码到您的网址中但与\w
不匹配,因此您需要更新您的网址以支持这些
^product/(?P<food_name>[\w\u0600-\u06FF]+)/
会处理大部分内容(请参阅this regexr example),但我不熟悉阿拉伯语,足以知道ک
的unicode是什么
答案 1 :(得分:1)
我相信这是因为\w+
与网址编码的字符串不匹配。尝试将其暂时更改为.*
(只是为了检查是否有其他问题)。如果它可行 - 请更改\w+
以更好地匹配网址编码的字符串。