在Django 1.0之前,有一个简单的方法来获取一个对象的管理url,我写了一个小的过滤器,我可以这样使用:<a href="{{object|admin_url}}" ....>……< / >
基本上我使用的是url反向函数视图名是django。contrib。admin。views。main。change_stage
reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] )
来获取url。
正如你可能已经猜到的,我正在尝试更新到最新版本的Django,这是我遇到的障碍之一,获取管理url的方法不再有效。
如何在django 1.0中做到这一点?(或者1.1,因为我正在尝试在svn中更新到最新版本)。
使用模板标记admin_urlname
后面的版本(>=1.10)还有另一种方法,Django文档推荐使用模板标签admin_urlname:
{% load admin_urls %}
<a href="{% url opts|admin_urlname:'add' %}">Add user</a>
<a href="{% url opts|admin_urlname:'delete' user.pk %}">Delete this user</a>
其中opts是类似mymodelinstance的东西。或MyModelClass._meta
一个问题是你不能在Django模板中直接访问下划线属性(比如{{myinstance. xml)。_meta}}),所以你必须把opts对象作为模板上下文从视图中传入。
我通过将表达式更改为:
reverse( 'django-admin', args=["%s/%s/%s/" % (app_label, model_name, object_id)] )
这需要/假设根url配置文件有一个admin url处理程序的名字,主要是“django-admin”。
例如,在根url conf中:
url(r'^admin/(.*)', admin.site.root, name='django-admin'),
它似乎起作用了,但我不确定它是否干净。
我有一个类似的问题,我试图调用反向('admin_index'),并不断得到django.core.urlresolver . noreversematch错误。
原来我的urls.py文件中有旧格式的管理url。
我在我的urlpatterns中有这个:
(r'^admin/(.*)', admin.site.root),
这可以让管理屏幕工作,但这是不推荐的方式。我需要把它改成这样:
(r'^admin/', include(admin.site.urls) ),
一旦我这样做了,所有在反向管理url文档中承诺的好处开始工作。