【问题标题】:Django reverse URL for app应用程序的 Django 反向 URL
【发布时间】:2017-08-02 10:06:00
【问题描述】:

我在我的 Django 项目中使用第三方应用程序 (django-sphinxdoc),我希望能够在 base.html 模板中链接到它,以便可以从所有使用 base.html 的页面访问它,但我就是不知道该怎么做。它适用于下面定义的“Home”和“Admin”。

我尝试了许多不同的变体,并得到以下结果:

异常类型:NoReverseMatch 异常值:Reverse for 'doc-list' 带有参数 '()' 和关键字参数 '{}' 不是 成立。尝试了 0 个模式:[]

我有一个 urls.py:

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

urlpatterns = [
    url(r'^', include('Myapp.urls', namespace='Myapp')),
    url(r'^admin/', admin.site.urls),
    url(r'^docs/', include('sphinxdoc.urls', namespace='Myapp-sphinxdoc'),),
]

一个Myapp/urls.py:

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

urlpatterns = [
    url(r'^$', views.index, name='Myapp-index'),
    url(r'^(?P<detail_id>[0-9]+)/$', views.detail, name='Myapp-detail'),
]

我的base.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html lang="en">

<head>
  <title>{% block title %}{% endblock %}</title>
</head>

<body>
  <div class="box">
    <h1>MYAPP</h1>
    <hr>
    <a href="{% url 'Myapp:Myapp-index' %}">Home</a>
    <a href="{% url 'admin:index' %}">Admin</a>
    <a href="{% url 'Myapp-sphinxdoc:doc-list' %}">Docs</a>
    <hr>
    {% block content %}{% endblock %}
    {% block footer %}
    <hr>
      © Copyright 2017, MG
    {% endblock %}
  </div>
</body>
</html>

在 sphinxdoc urls.py 中,我找到了我试图在上面引用的名称“doc-list”:

urlpatterns = [
    url(r'^$', views.OverviewList.as_view(), name='docs-list',),
...

我想我不明白如何使用名称和命名空间,任何建议将不胜感激。

/M

【问题讨论】:

  • 您能分享一个指向sphinx 网址的链接吗?
  • 根据django-sphinxdoc.sphinxdoc.urls,没有名为docs-list的网址。
  • 可能忘记s应该是'Myapp-sphinxdoc:docs-list'
  • 哦,是的,一个错字。然而,在urls.py 中,没有这样的url。无论如何!
  • 感谢您的回复!你是对的,有一个错字,当我在“Myapp-sphinxdoc:docs-list”中添加“s”时,我的应用程序以三个链接开始,显示为“Home”、“Admin”和“Docs”。之前我已经在这个阶段得到了 NoReverseMatch。但是,如果我现在按下 'Docs' 链接,它会抛出 NoReverseMatch 并带有“Reverse for 'doc-index' with arguments '()' and keyword arguments '{'slug': 'Myapp}' not found. 0 pattern(s ) 尝试过:[]"。

标签: python django


【解决方案1】:

嗯,现在可以了,但我真的不明白为什么...... 我更正了 nik_m 和 metmirr 发现的错字,然后在我的根 urls.py 中添加了一行,下面是第三个 url 模式:

urlpatterns = [
    url(r'^', include('Myapp.urls', namespace='Myapp')),
    url(r'^admin/', admin.site.urls),
    url(r'^docs/', include('sphinxdoc.urls')),
    url(r'^docs/', include('sphinxdoc.urls', namespace='Myapp-sphinxdoc')),
]

如果我删除了第三或第四个模式中的任何一个,我会得到错误。 所以,我很高兴一切正常,但我真的很想了解原因。

【讨论】:

  • 加油@mats!太棒了!
  • nik_m,metmirr,感谢您的帮助。我仍然不明白为什么我需要那个新的 urlpattern。
猜你喜欢
  • 2014-01-12
  • 2015-06-19
  • 2015-01-07
  • 2019-10-27
  • 2023-01-27
  • 2019-08-09
  • 2018-05-19
  • 1970-01-01
  • 2010-11-16
相关资源
最近更新 更多