3

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

{% 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:

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

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

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

有任何想法吗?谢谢!

4

3 回答 3

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

在您的模板中:

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

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

于 2012-10-17T08:05:41.623 回答
3

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

{% url 'admin:index' %}

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

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

wherekeyword来自此处列出的命名参数(即add, change, delete)。

于 2012-10-23T13:54:08.887 回答
0

您几乎可以肯定使用的是已发布的 1.4 版本,而不是开发版本。正如该版本的文档所示,您需要先使用{% load url from future %},然后才能使用该语法。

于 2012-10-14T16:59:02.433 回答