如何按字符串查询

How to query by string

在产品模型中,我想按食品名称查询。和 return 我 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+)/']

删除urlencode,你不需要它

<a href="{% url 'product' food_name=catalog.food_name %}">some text</a>

urlencode 当您需要以允许它在 url 中使用的方式对字符串进行编码时使用(例如,当您添加 get 参数时)。在上面,您只是将字符串参数传递给正在构造 url.

的函数

您似乎试图将阿拉伯字符编码到您的 url 中,但 \w 不匹配,因此您需要更新您的 url 以支持这些

^product/(?P<food_name>[\w\u0600-\u06FF]+)/

将处理其中的大部分(参见 this regexr example),但我对阿拉伯语的熟悉程度不足以了解 ک 的 unicode 是什么

我认为这是因为 \w+ 不匹配 URL-encoded 字符串。尝试将其临时更改为.*(只是为了检查是否没有任何其他问题)。如果可行 — 将 \w+ 更改为更好的模板匹配 URL-encoded 字符串。