2013-02-22 53 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