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

TAH*_*TAH 3 django django-urls django-admin

这里是 Django 新手。根据文档,我尝试执行以下操作从我正在构建的公共网站的主页获取管理网站的链接:

{% load admin_urls %}
<p>Go to the <a href="{% url opts|admin_urlname:'add' %}">admin</a>.</p>
Run Code Online (Sandbox Code Playgroud)

我收到错误:

NoReverseMatch at /
u'opts|admin_urlname' is not a registered namespace
Run Code Online (Sandbox Code Playgroud)

我正确地包含了 URL:

    url(r'^admin/', include(admin.site.urls)),
Run Code Online (Sandbox Code Playgroud)

我的模板加载器的顺序正确

我对此尝试了几种不同的变体,它们都会引发命名空间错误。

有任何想法吗?谢谢!

xbe*_*llo 5

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

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

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

在您的模板中:

{% url opts|admin_urlname:'change' object.pk %}
Run Code Online (Sandbox Code Playgroud)

其中更改可以是反向管理 URL文档页面中的任何操作。


TAH*_*TAH 5

虽然上面的答案对我调用的代码很有帮助,但还有一种简单的方法。我用这个代替:

{% url 'admin:index' %}
Run Code Online (Sandbox Code Playgroud)

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

{% url 'admin:myapp_mymodel_<keyword>' object.id %}
Run Code Online (Sandbox Code Playgroud)

其中keyword是来自此处列出的命名参数(即add, change, delete)。

  • 这对我来说效果很好,但需要引号(也许自从发布这个答案以来 Django 发生了变化):``{% url 'admin:myproject_myapp_user_change' user.id %}`` (2认同)