2017-01-13 4 views
2

商品モデルでは、私は食品のタイトルで質問したいと思います。そして私に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+)/'] 

答えて

1

\w+はURLエンコードされた文字列と一致しません。 を一時的に.*に変更してください(その他の問題がないかどうかを確認するだけです)。それがうまくいくならば、\w+を、より良いテンプレートマッチングURLエンコード文字列に変更してください。

3

は、あなたはそれが(例えば、あなたがしているときのように、URL内で使用できるようになりますように、文字列をエンコードする必要がある場合、あなたはそれ

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

urlencodeが使用されている必要はありませんが、urlencode削除しますgetパラメータを追加する)。上の例では、URLを構築している関数に文字列パラメータを渡すだけです。


あなたはこれらの

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

これらのほとんどを処理する(this regexr exampleを参照してくださいので、あなたがサポートするためのURLを更新する必要が\wで一致していない、あなたのURLにアラビア文字をエンコードしようとしているように見えます)、私は十分なアラビア語に慣れていないので、کのユニコードは

です。
+0

これを削除すると、 'ascii'コーデックエラー – shahin

+1

が返されます。これは別の問題です。これはあなたの質問に答える+1 – e4c5

+0

@ehsan - 私はあなたのURLにアラビア語を含めることを試みていたとは思わなかった、私は私の答えを更新しました。 – Sayse

関連する問題