如何按字符串查询

时间:2017-01-13 08:34:10

标签: django django-queryset django-urls

在产品型号中,我想按食品标题查询。并返回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+)/']

2 个答案:

答案 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+以更好地匹配网址编码的字符串。