没有反向匹配错误。怎么调试?

时间:2011-06-21 01:08:37

标签: django django-urls

我正在尝试链接此处所在的django的databrowse.admin小部件:

http://127.0.0.1:8000/admin/openmaps/open_layers/

我试图把它放在一个模板中,它返回了一个反向匹配错误。如何调试?

<a href="{% url /admin/openmaps/open_layers/ %}">A</a>

1 个答案:

答案 0 :(得分:5)

您尝试使用的URL标记在此处的Django文档中指定(对于版本1.4):

https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#url

其目的是将URL保留在您的链接DRY(不要重复自己)中,这样您就不必在开发,登台,生产或任何其他服务器环境之间更改链接URL。

url标记通过url名称作为主要参数获取视图或对视图的引用,以及视图作为第二个参数的任何参数。来自文档:

{% url path.to.some_view v1 v2 %}

其中path是包名称,to是模块名称,some_view是视图函数。 v1v2是视图所采用的算法。它在path / to.py中看起来像这样:

from django.http import HttpResponse

def some_view(request, v1, v2):
    return HttpResponse("A response")

此外,在处理admin时,您需要使用URL命名空间策略来使用命名空间admin,如下所示:

{% url admin:view_name %}

您需要做的是找到您要查找的视图的路径,并使用该路径创建URL。为了帮助您入门,您可以创建一个指向管理站点索引的链接,如下所示:

<a href="{% url admin:index %}">My Admin Site</a>

这些将分别为管理员注销,密码更改表单和应用程序列表创建链接:

<a href="{% url admin:logout %}">Admin Logout</a>
<a href="{% url admin:password_change %}">Change Password</a>
<a href="{% url admin:app_list %}">The Application List</a>

对于管理员中特定模型的视图,django使用模型上的元数据构建其URL名称。您可以对模型执行相同操作以链接到其管理页面,但是,您需要以编程方式构建其名称(除非您了解它们)。因此,如果您有一个名为Foo的模型,您可以通过构建视图名称并在其上使用reverse方法分别链接到其更改列表视图,添加视图和删除视图:

在您看来:

from django.core.urlresolvers import reverse

#...some view code...
#Get an instance of the model
bar = Foo.objects.all()[0]
prefix = "%s_%s_" % (Foo._meta.app_label, Foo._meta.module_name)
changelist_name = "%schangelist" % prefix
add_name = "%sadd" % prefix
delete_name = "%sdelete" % prefix

changelist_url = reverse(changelist_name)
add_url = reverse(add_name)
delete_url = reverse(delete_name, args=(bar.pk,)) #You need the id of the model you want to delete as an argument.

#...some more view code...

在您的模板中

<a href="{{ changelist_url }}">The Foo ChangeList</a>
<a href="{{ add_url }}">Add a Foo</a>
<a href="{{ delete_url }}">Delete {{ bar.name }}</a>

您可能需要深入了解django或您正在使用的任何特定扩展程序的内容,以获取您想要的确切网址名称。如果您可以提供有关您尝试在管理员中访问的模型的更多详细信息,我可以提供更具体的答案。