【问题标题】:Django NameSpace ErrorDjango 命名空间错误
【发布时间】:2013-02-07 23:11:08
【问题描述】:

我设计了这个投票应用程序,我正在尝试将硬代码 url 转换为命名空间 url,但路径中有错误。

这是我的 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 detail poll.id %} 或 {% url myapp:detail 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 URLconf 而不会出现任何错误?

【问题讨论】:

  • 我假设您想要语法 myapp:index?
  • 这个 index.html 模板将 poll.id 传递给名为 detail 的视图函数。
  • 整个代码运行良好,我只想将硬编码的 url 转换为命名空间。 "/polls/{{ poll.id }}/" 用 poll.id 指向详细函数

标签: django


【解决方案1】:

根据用例不同,执行方式也不同。

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

{% url detail poll.id %}

url-tag 匹配名称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 个月前的票。

** 编辑 **

【讨论】:

  • NoReverseMatch at /polls/ 未找到带有参数“(5,)”和关键字参数“{}”的“详细信息”。
  • 我也试过 {% url myapp:detail poll.id %} 但收到同样的错误
  • 你很可能在你的 myapp url-conf 中有一些比较高的东西。我将发布我制作的代码。 2 秒。
  • 是的,谢谢你的关注@
  • 我能问你吗。您是否测试了 poll_detail 答案?因为我在 /polls/ Reverse 遇到了这个错误 NoReverseMatch
猜你喜欢
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多