python顯示多張照片 - set_size_inches




使用參數'()'和未找到關鍵字參數'{}'來反轉'*' (5)

渲染時捕獲異常:

使用參數'()'和關鍵字參數'{}'找不到'products.views.'filter_by_led'的反轉。

我能夠從shell成功導入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。

我究竟做錯了什麼?


Shell調用反向 (如上所述)非常適合調試這些問題,但有兩個關鍵條件:

  • 必須提供匹配視圖所需的任何參數的參數,
  • 這些參數必須與正則表達式模式匹配。

是的,這是合乎邏輯的。 是的,它也令人困惑,因為反向只會拋出異常並且不會給你任何進一步的提示。

URL模式的示例:

url(r'^cookies/(?P<hostname>[^/]+)/(?P<url_id>\d+)/$', 'register_site.views.show_cookies', name='show_cookies'),

然後在shell中發生了什麼:

>>> 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與regexp(預期的數字,提供的字符串)不匹配。

您可以對位置參數和關鍵字參數使用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''

當我刪除引號時它開始工作:

{%url show_cookies hostname = u.hostname url_id = u.pk%}

這令人困惑。


如果它有幫助的人,我有一個類似的問題,錯誤是由於兩個原因:

  1. 在url名稱之前不使用應用程序的命名空間

    {% url 'app_name:url_name' %}
    
  2. 網址名稱周圍缺少單引號(Charlie here指出)


我有一個類似的問題,解決方案正確使用'$'(字符串結束)字符:

我的主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')
]

我兩次使用'$'。 所以一個簡單的改變工作:

urlpatterns = [
url(r'^admin/', include(admin.site.urls )),
url(r'^cp/', include('card_purchase.urls' )),
]

注意第二個網址的變化! 我的card_purchases應用的url.py看起來像這樣:

urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^purchase/$', views.purchase_detail, name='purchase')
]

除此之外,我可以確認命名網址周圍的引用是至關重要的!


我能想到的有三件事情:

  1. 只是使用了命名網址 ,無論如何它都更加強大和可維護
  2. 嘗試在命令行使用django.core.urlresolvers.reverse以獲得(可能)更好的錯誤

    >>> from django.core.urlresolvers import reverse
    >>> reverse('products.views.filter_by_led')
    
  3. 檢查您是否有多個指向該視圖的網址


{% url 'polls:create' poll.id %}




django-templates