2013-02-22 52 views
0

我設計了這個投票應用程序,我試圖將硬代碼url轉換爲命名空間url,但沿路徑出現錯誤。Django NameSpace錯誤

這是我的index.html,你可以看到他們的一個硬編碼的URL指向我的URLconf。

{% if latest_poll_list %} 
    <ul> 
    {% for poll in latest_poll_list %} 
     <li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li> 
    {% endfor %} 
    </ul> 
{% else %} 
    <p>No polls are available.</p> 
{% endif %} 

我的myapp URLconf。

from django.conf.urls import patterns, include, url 
from django.contrib import admin 
from django.conf import settings 

from django.conf.urls import patterns, include, url 

urlpatterns = patterns('myapp.views', 
    url(r'^$', 'index', name="index"), 
    url(r'^(?P<poll_id>\d+)/$', 'detail',name="detail"), 
    url(r'^(?P<poll_id>\d+)/results/$', 'results', name="results"), 
    url(r'^(?P<poll_id>\d+)/vote/$', 'vote', name="vote"), 
) 

這是我的主要URLconf。

from django.conf.urls import patterns, include, url 
from django.contrib import admin 
from django.conf import settings 

admin.autodiscover() 
urlpatterns = patterns('', 
    url(r'^polls/', include('myapp.urls', namespace='myapp')),     
, 
) 

我的看法是:

def detail(request, poll_id): 
    p = get_object_or_404(Poll, pk=poll_id) 
    return render_to_response('myapp/detail.html', {'poll': p}, 
context_instance=RequestContext(request)) 

我試着更換爲硬編碼錯誤{%URL詳細poll.id%}或{%URL的myapp:詳細poll.id%}

但我收到此錯誤

NoReverseMatch at /polls/ 

Reverse for 'detail' with arguments '(5,)' and keyword arguments '{}' not found. 

Request Method: GET 
Request URL: http://127.0.0.1:8000/polls/ 
Django Version: 1.4.3 

Exception Type: NoReverseMatch 
    Exception Value: 

Reverse for 'detail' with arguments '(5,)' and keyword arguments '{}' not found. 

    Error during template rendering 

    In template C:\djcode\mysite\myapp\templates\myapp\index.html, error at line 4 
    Reverse for 'detail' with arguments '(5,)' and keyword arguments '{}' not found. 
    1  {% if latest_poll_list %} 
    2  <ul> 
    3  {% for poll in latest_poll_list %} 
    4  <li><a href="{% url detail poll.id %}">{{ poll.question }}</a></li> 
    5  {% endfor %} 
    6  </ul> 
    7  {% else %} 
    8  <p>No polls are available.</p> 
    9  {% endif %} 

我如何轉換這種硬編碼的URL到命名空間,以便它可以指向MyApp的URL配置無線網絡沒有任何錯誤?

+0

我假設你想要的語法'myapp:index'? – 2013-02-22 10:52:57

+0

那麼這個index.html模板會將poll.id傳遞給名爲detail的視圖函數。 – donkeyboy72 2013-02-22 10:55:05

+0

整個代碼工作正常,我只是想將硬編碼的網址轉換爲名稱空間。 「/ polls/{{poll.id}} /」指向poll.id的詳細功能 – donkeyboy72 2013-02-22 10:56:04

回答

0

根據用例不同,做它的方式也不同。

你可以做,這可能是你的用例。

{% url detail poll.id %} 

其中URL標籤上的名稱detail及以下poll.id

我們想在這裏討論的另一種方法是相匹配,如果你要具有相同的應用程序的多個實例,那麼你將不得不使用url命名空間。 Discussed here

主要urls.py

url(r'^polls/', include('core.urls')), 

包括urls.py

urlpatterns = patterns('', 
    url(r'^/(?P<polls_id>\d+)/$', 'core.views.polls_detail_view',name="poll_detail") 
) 

模板

<a href="{% url poll_detail 1 %}">To Poll Detail</a> 

`views.py``

def polls_detail_view(request, poll_detail): 
    print "Hello Poll detail: %s" % (poll_detail) 

**編輯** 搜索這兩個SO帖子後,解釋了爲什麼OP的配置是不行的。

First SO Post

Second SO Post

這是19個月前的門票。

**編輯**

+0

/Requires/OldReverseMatch 反轉'detail'與參數'(5,)'和關鍵字參數'{}'未找到。 – donkeyboy72 2013-02-22 10:59:11

+0

我也嘗試了{%url myapp:detail poll.id%},但收到了相同的錯誤 – donkeyboy72 2013-02-22 11:01:02

+0

您很可能在myapp url-conf中有更多的東西抓住它。我將發佈我所做的代碼。 2秒。 – 2013-02-22 11:18:00