レンダリング中に例外をキャッチしました:
引数 '()'およびキーワード引数 '{}'が見つからない 'products.views.'filter_by_led'の逆.
products.views.filter_by_led
をシェルから正常にインポートできたので、パスが正しくなるように機能しました。
Urls.pyは次のとおりです。
(r'^led-tv/$', filter_by_led ),
これは、エラーが生成されている場所です。
href="{% url products.views.filter_by_led %}">
これは同じファイルでうまく機能するため、理解できません:
{% url products.views.lcd_screen_size screen_size=50 %}
関数の定義は次のとおりです。
def filter_by_led(request):
Django=は、関数がその関数のReverseを見つけることができないと考えるだろうという理由がわかりません。
すべての*.pyc
ファイルを削除し、Apacheを再起動しました。
何が間違っていますか?
私は頭の外から考えることができる3つのことがあります:
(おそらく)より良いエラーのために、コマンドラインでDjango.core.urlresolvers.reverse
を使用してみてください
>>> from Django.core.urlresolvers import reverse
>>> reverse('products.views.filter_by_led')
そのビューを指すURLが複数あるかどうかを確認します
reverse(上記のように)へのシェル呼び出しはこれらの問題をデバッグするのに非常に良いですが、2つの重大な条件があります:
はい、それは論理的です。はい。reverseは例外をスローするだけで、それ以上のヒントは表示されないため、混乱を招きます。
URLパターンの例:
url(r'^cookies/(?P<hostname>[^/]+)/(?P<url_id>\d+)/$', 'register_site.views.show_cookies', name='show_cookies'),
そして、シェルで何が起こるか:
>>> from register_site.views import show_cookies
>>> reverse(show_cookies)
NoReverseMatch: Reverse for 'register_site.views.show_cookies' with arguments '()' and keyword arguments '{}' not found.
引数を指定しなかったため、機能しません。
>>> reverse('show_cookies', kwargs={'url_id':123,'hostname': 'aaa'})
'/cookies/aaa/123'
今ではうまくいきましたが...
>>> reverse('show_cookies', kwargs={'url_id':'x','hostname': 'www.dupa.com'})
NoReverseMatch: Reverse for 'show_cookies' with arguments '()' and keyword arguments '{'url_id': 'x', 'hostname': 'www.dupa.com'}' not found.
url_idが正規表現(予想される数値、指定された文字列)と一致しなかったため、動作しませんでした。
reverseを位置引数とキーワード引数の両方で使用できます。構文は次のとおりです。
reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None)
urlテンプレートタグに関しては、面白いことがあります。 Django documentation は、引用符で囲まれたビュー名の使用例を示します。
{%url 'news.views.year_archive' yearvar%}
したがって、HTMLテンプレートで同様の方法で使用しました。
{%url 'show_cookies' hostname = u.hostname url_id = u.pk%}
しかし、これは私にはうまくいきませんでした。しかし、例外メッセージは、何が間違っている可能性があるかのヒントを与えてくれました-ビュー名を囲む二重引用符に注意してください:
引数付きの '' show_cookies ''の逆...
Iremoved引用符を削除すると動作し始めました:
{%url show_cookies hostname = u.hostname url_id = u.pk%}
そして、これはis紛らわしいです。
ビュー名を単一引用符で囲む必要があります
{% url 'viewname' %}
の代わりに
{% url viewname %}
私は同様の問題を抱えていて、解決策は「$」(文字列の終わり)文字の正しい使用法でした:
私のメインのurl.pyはこのように見えました($文字に注意してください):
urlpatterns = [
url(r'^admin/', include(admin.site.urls )),
url(r'^$', include('card_purchase.urls' )),
]
また、card_purchasesアプリのurl.pyは次のように述べています。
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^purchase/$', views.purchase_detail, name='purchase')
]
「$」を2回使用しました。したがって、簡単な変更が機能しました。
urlpatterns = [
url(r'^admin/', include(admin.site.urls )),
url(r'^cp/', include('card_purchase.urls' )),
]
2番目のURLの変更に注目してください! card_purchasesアプリのurl.pyは次のようになります。
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^purchase/$', views.purchase_detail, name='purchase')
]
これとは別に、名前付きURLを囲む引用符が重要であることを確認できます!
それが誰かを助ける場合、私は同様の問題を抱えていましたが、エラーは2つの理由によるものでした:
URL名の前にアプリの名前空間を使用していない
{% url 'app_name:url_name' %}
URL名の前後に一重引用符がありません(指摘されているように ここ チャーリー)
{% url 'polls:create' poll.id %}
URLエントリに末尾のスラッシュは必要ないと思います。すなわち、代わりにこれを置きます:
(r'^led-tv$', filter_by_led ),
これは、デフォルトの 末尾のスラッシュ が有効になっていることを前提としています。