8

現在、DjangoURLタグでNoReverseMatchエラーが発生しています。Djangoの決定的なガイド、Djangoのドキュメントをフォローし、この辺りとインターネットを検索しました

URL:

url(r'^test/', Search_Page),
url(r'^search/', Search),
url(r'^details/', Details_Main),
url(r'^Link/(d+)/$', Link),
url(r'^$', 'Parks.views.Link', name="home"),
url(r'^(?P<result_name>)/$', Link),

ビュー:

def Link(request, result_name):
    return render_to_response('Search_Page.html')

レンプレート:

{% for result in results %}
    <a href="{% url name result.name %}">test</a>

エラー:

NoReverseMatch at /search/
Reverse for 'name' with arguments '(u'North West Thrill Centre',)' and keyword arguments '{}' not found.Request Method: GET 
Request URL: http://127.0.0.1:8000/search/?search=a&type=parks&submit=Search 
Django Version: 1.4.2 
Exception Type: NoReverseMatch 
Exception Value: Reverse for 'name' with arguments '(u'North West Thrill Centre',)' and keyword arguments '{}' not found. 
Exception Location: C:\Python27\lib\site-packages\django\template\defaulttags.py in render, line 424 
Python Executable: C:\Python27\python.exe 
Python Version: 2.7.3 
Python Path: ['C:\\Users\\User\\Documents\\Django\\ParkManager',
 'C:\\Windows\\system32\\python27.zip',
 'C:\\Python27\\DLLs',
 'C:\\Python27\\lib',
 'C:\\Python27\\lib\\plat-win',
 'C:\\Python27\\lib\\lib-tk',
 'C:\\Python27',
 'C:\\Python27\\lib\\site-packages'] 
Server time: Mon, 4 Feb 2013 16:44:27 +0000 

Error during template rendering
In template C:\Users\User\Documents\Django\ParkManager\Templates\Details_Main.html, error at line 23

前もって感謝します

4

2 に答える 2

8

どのビューを呼び出そうとしていますか? nameビューでURL を呼び出していますが、name存在しません。という名前のビューが 1 つしかないのでhome、それが使用しようとしているビューであると仮定します。

ビューも URL も引数を取りませんがresult.name、URL で引数として渡しています。

を介してビューでパラメーターを受け入れ、def Link(request, result_name):正規表現を使用して URL でキャプチャする(?P<result_name>..か、渡されたパラメーターなしで URL を呼び出す必要があります。

{% for result in results %}
    <a href="{% url home %}">test</a>

ビューにはまだロジックがなく、複数単語のパラメーターを渡しており、それを「スラッグ化」していないため、後者を実行して、URL 呼び出しからパラメーターを削除するだけであると仮定します。

于 2013-02-04T16:55:12.743 に答える
1

{% url name result.name %} が問題です。

Link メソッドにはキーワード引数があるため、url リバース テンプレート タグには一致するキーワード引数が必要です。

template.html

<a href="{% url search result_name=result.name %}">test</a>

テンプレートで URL を逆にする適切な方法は次のようになります:
{% url [name] [args] [kwargs] %}


[name] は、test、search_start、details、link、home、または search のいずれかです。または、ビュー関数へのフル パスですが、今のところシンプルにしておくことをお勧めします。
[args] は空にすることも、引数リストにすることもできます。
[kwargs] は空にすることも、キーワード引数リストにすることもできます。

url タグのドキュメントはここで見つけることができ、それを使用する他の方法の概要を説明しています ( https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#url )。

*余談ですが、スペースやアンパサンドなど、検索文字列で許可されている URL で許可されていない文字を使用すると、問題が発生します。

urls.py

url(r'^test/', Search_Page, name="test"),
url(r'^search/', Search, name="search_start"),
url(r'^details/', Details_Main, name="details"),
url(r'^Link/(d+)/$', Link, name="link"),
url(r'^$', 'Parks.views.Link', name="home"),
url(r'^(?P<result_name>)/$', Link, name="search"),

another_template.html

<a href="{% url search result_name=result.name %}">test</a>
<!-- and more examples -->
<a href="{% url test %}">link to test</a>  
<a href="{% url search_start %}">link to search</a> 
<a href="{% url details %}">link to details</a> 
{% for a_link in links %}
    <a href="{% url link a_link.id %}">link to details (of a_link)</a> 
{% endfor %}
<a href="{% url home %}">home</a> 
于 2013-02-04T18:43:01.967 に答える