在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_link方法添加到特定模型)
class CommonModel(models.Model):
def admin_link(self):
if self.pk:
return mark_safe(u'<a target="_blank" href="../../../%s/%s/%s/">%s</a>' % (self._meta.app_label,
self._meta.object_name.lower(), self.pk, self))
else:
return mark_safe(u'')
class Meta:
abstract = True
从基础模型继承
class User(CommonModel):
username = models.CharField(max_length=765)
password = models.CharField(max_length=192)
在模板中使用它
{{ user.admin_link }}
或视图
user.admin_link()
如果你使用的是1.0,试着做一个自定义的模板标签,看起来像这样:
def adminpageurl(object, link=None):
if link is None:
link = object
return "<a href=\"/admin/%s/%s/%d\">%s</a>" % (
instance._meta.app_label,
instance._meta.module_name,
instance.id,
link,
)
然后在模板中使用{% adminpageurl my_object %}(别忘了先加载templatetag)
我有一个类似的问题,我试图调用反向('admin_index'),并不断得到django.core.urlresolver . noreversematch错误。
原来我的urls.py文件中有旧格式的管理url。
我在我的urlpatterns中有这个:
(r'^admin/(.*)', admin.site.root),
这可以让管理屏幕工作,但这是不推荐的方式。我需要把它改成这样:
(r'^admin/', include(admin.site.urls) ),
一旦我这样做了,所有在反向管理url文档中承诺的好处开始工作。