2016-02-26 105 views
0

這裏是我的html代碼爲什麼這個字符串附帶一些特殊字符?

<b><a href="{% url 'polls:logout_info' %}">logout</a></b> 
<b><a href={% url 'polls:edit' author %}>Edit</a></b> 
<br> 

<center><h2> -- WELCOME {{ name }} -- </h2></center> 
{% if errors %} 
     <ul> 
      {% for error in errors %} 
      <center>{{ error }}</center> 
      {% endfor %} 
     </ul> 
{% endif %}<br> 

這裏是url.py代碼(與此相關的代碼只是顯示URL)

從django.conf.urls導入網址

從。進口觀點

urlpatterns = [ 
    url(r'^login/$', views.login ,name='login'), 
    url(r'^saveinfo/$', views.saveinfo ,name='saveinfo'), 
    url(r'^indexmain/$', views.indexmain ,name='indexmain'), 
    url(r'^indexmain1/$', views.indexmain1 ,name='indexmain1'), 
    url(r'^homemain/$', views.homemain ,name='homemain'), 
    url(r'^logout_info/$', views.logout_info ,name='logout_info'), 
    url(r'^edit/(?P<author>[a-z]+)/$', views.edit ,name='edit'), 
] 

我得到這個錯誤:

NoReverseMatch at /polls/login/ Reverse for '' with arguments '('pratiksha ',)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

爲什麼這個字符串帶有附加一些特殊字符?

+0

哪裏?我不明白你在問什麼 – Sayse

+0

author =「pratiksha」,所以當我通過url顯示上面...字符串附加一些特殊字符。即'('pratiksha')''就是這樣。 – Pratiksha

+0

多餘的字符只是django如何處理參數的方式。 Django將所有參數放在一個元組中,並在錯誤消息中顯示該元組。如果你將2個參數傳入你的URL,參數將如下所示:''('pratiksha','2nd-parameter')' – GwynBleidD

回答

2

讓我們來解釋如何讀取NoReverseMatch錯誤。

有5個變量中的錯誤信息可視化:

  1. 圖形名稱:右後「反向爲」中所示,兩個撇號之間。
  2. 傳遞的位置參數列表:以「帶參數」的形式顯示在兩個撇號之間,形式爲元組。記得!所有模式都以一個元組的形式呈現,可能會讓您感到困惑。
  3. dict通過關鍵字參數:顯示在「和關鍵字參數」之後,也在兩個撇號之間,以dict的形式。
  4. 嘗試模式的數量:顯示在「未找到。」之後,爲整數。
  5. 嘗試模式列表:顯示「模式嘗試:」後,作爲python列表。

現在,一些瞭解URL反轉如何工作:django將嘗試找到與您提供的模式名稱匹配的所有urlpatterns。對於每個模式名稱,它將檢查提供的位置參數或關鍵字參數是否可以插入到參數中以代替正則表達式組。所有這些模式將被列爲已嘗試模式。

現在,從錯誤消息我們可以發現, 1.沒有模式被嘗試過,所以沒有發現模式匹配提供的模式名稱。這個問題的解決方案很簡單:您將'polls:edit'傳遞給url標記,但是您的模式名爲'edit',並且未在名爲'polls'的名稱空間中註冊。您可以修復通過使剛剛「修改」或通過移動模式到名字空間:

urlpatterns = [ 
    url(r'^login/$', views.login ,name='login'), 
    url(r'^saveinfo/$', views.saveinfo ,name='saveinfo'), 
    url(r'^indexmain/$', views.indexmain ,name='indexmain'), 
    url(r'^indexmain1/$', views.indexmain1 ,name='indexmain1'), 
    url(r'^homemain/$', views.homemain ,name='homemain'), 

    url(r'^', include([ 
     url(r'^logout_info/$', views.logout_info ,name='logout_info'), 
     url(r'^edit/(?P<author>[a-z]+)/$', views.edit ,name='edit'), 
    ], namespace="polls")), 
] 
  • 有在第一的端部的多餘的空白(只)的位置參數。這不會被你的正則表達式接受,所以它不會被匹配。你必須擺脫那個空白。在視圖簡單地調用:

    上下文[ '作者'] =上下文[ '作者']條()

  • +0

    不可以!我也查過了。 – Pratiksha

    +0

    請參考這個http://stackoverflow.com/questions/12812716/how-do-i-pass-variables -in-django-through-the-url – Pratiksha

    +0

    嘿thabk你,我解決了它,所有關於catche名字的空間:-) :-D – Pratiksha