如何按字符串查询
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 字符串。
在产品模型中,我想按食品名称查询。和 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 字符串。