NoReverseMatch at /,u'opts | admin_urlname'不是注册的命名空间Django 1.4.1

时间:2012-10-14 16:46:12

标签: django django-admin django-urls

Django新手在这里。在documentation之后,我正在尝试以下方法从我正在建设的公共网站的主页获取管理网站的链接:

{% load admin_urls %}
<p>Go to the <a href="{% url opts|admin_urlname:'add' %}">admin</a>.</p>

我收到错误:

NoReverseMatch at /
u'opts|admin_urlname' is not a registered namespace

我正确地包含了网址:

    url(r'^admin/', include(admin.site.urls)),

我的template loaders are in the right order

我已经尝试了一些不同的变体,它们都会抛出命名空间错误。

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:4)

在Daniel Screenman / Django文档在一个屏幕上播放30分钟后,我的代码放在另一个屏幕上,我想出了这个简单的解决方案:

views.py中,使用模型的_meta(包括必需的app_labelmodel_name)添加opts上下文:

class YourModelDetailView(DetailView):
    def get_context_data(self, **kwargs):
        context = super(YourModelDetailView, self).get_context_data(**kwargs)
        context["opts"] = YourModel._meta
        return context

在模板中:

{% url opts|admin_urlname:'change' object.pk %}

更改可以是reverse admin urls文档页面中的任何操作。

答案 1 :(得分:3)

虽然上面的答案对我调用的代码很有帮助,但还有一个很多更简单的方法。我正在使用它:

{% url 'admin:index' %}

这适用于自定义管理员视图,例如:

{% url 'admin:myapp_mymodel_<keyword>' object.id %}

keyword来自named parameters listed here(即addchangedelete)。

答案 2 :(得分:0)

您几乎肯定会使用已发布的1.4版本,而不是开发版本。正如documentation for that version所示,您需要先使用{% load url from future %}才能使用该语法。