在Django1.0之前,有一种简单的方法可以获取对象的管理url,我已经编写了一个小过滤器,使用方式如下:<a href="{{ object|admin_url }}" .... > ... </a>
基本上,我使用的是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中的最新版本)。
发布于 2009-05-11 21:40:14
我遇到过一个类似的问题,我试图调用reverse('admin_index')
,但不断收到django.core.urlresolvers.NoReverseMatch
错误。
原来我的urls.py文件中有旧格式的管理urls。
我的urlpattern中有这样的内容:
(r'^admin/(.*)', admin.site.root),
它可以让管理屏幕正常工作,但这是一种被弃用的方式。我需要将其更改为:
(r'^admin/', include(admin.site.urls) ),
一旦我这样做了,Reversing Admin URLs文档中承诺的所有好处都开始起作用了。
发布于 2010-05-28 23:22:17
您可以直接在模板中使用URL解析器,无需编写自己的过滤器。例如。
{% url 'admin:index' %}
{% url 'admin:polls_choice_add' %}
{% url 'admin:polls_choice_change' choice.id %}
{% url 'admin:polls_choice_changelist' %}
发布于 2009-11-12 17:17:33
from django.core.urlresolvers import reverse
def url_to_edit_object(obj):
url = reverse('admin:%s_%s_change' % (obj._meta.app_label, obj._meta.model_name), args=[obj.id] )
return u'<a href="%s">Edit %s</a>' % (url, obj.__unicode__())
这与hansen的解决方案类似,只是它使用了admin,url namespaces:作为管理员的默认应用程序名称空间。
https://stackoverflow.com/questions/694477
复制相似问题