当前位置:  开发笔记 > 后端 > 正文

获取Django管理URL以获取对象

如何解决《获取Django管理URL以获取对象》经验,为你挑选了6个好方法。

在Django 1.0之前有一个简单的方法来获取一个对象的管理URL,我写了一个小的过滤器,我会像这样使用: ...

基本上我使用的是url reverse函数,视图名称为 'django.contrib.admin.views.main.change_stage'

reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] )

得到网址.

正如您可能已经猜到的那样,我正在尝试更新到最新版本的Django,这是我遇到的障碍之一,获取管理URL的方法不再适用.

我怎么能在django 1.0中这样做?(或者1.1,因为我正在尝试更新到svn中的最新版本).



1> markmuetz..:

您可以直接在模板中使用URL解析器,无需编写自己的过滤器.例如

{% url 'admin:index' %}

{% url 'admin:polls_choice_add' %}

{% url 'admin:polls_choice_change' choice.id %}

{% url 'admin:polls_choice_changelist' %}

参考:文档


目前已完全记录了撤销管理员网址[https://docs.djangoproject.com/en/dev/ref/contrib/admin/#reversing-admin-urls](https://docs.djangoproject.com/en/)开发/ REF /的contrib /管理/#倒车管理员的URL)
shacker - 一切都在文档中......只是不在一个地方."url"模板标签记录在这里[http://docs.djangoproject.com/en/1.2/ref/templates/builtins/#url].在"Django 1.1中的新内容"部分中,文档说命名空间的URL很好,并指向[URL命名空间部分](http://docs.djangoproject.com/en/1.2/topics/http/urls /#主题-HTTP-倒车-URL的命名空间).将它们放在一起可以让您轻松地在模板中引用管理应用程序.NB我记得当我写回复时,文档是不同的.
你知道如何获得选择"列表"的链接吗?示例:如果"{%url admin:polls_choice_add%}"给出"/ admin/polls/choice/add"那么会给我"/ admin/polls/choice"的等价物是什么?
{%url admin:polls_choice_changelist%}返回'/ admin/polls/choice'网址

2> Mike Ramirez..:
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'Edit %s' % (url,  obj.__unicode__())

这类似于hansen_j的解决方案,除了它使用url命名空间,admin:是admin的默认应用程序命名空间.


好答案.仅供参考使用更新的django的人需要将object._meta.module_name更改为object._meta.model_name
谢谢,这有帮助.我会改变一件事:使用`args = [object.pk]`而不是`args = [object.id]`.当主键字段的名称不是"id"时,它涵盖了更常见的情况.
确保将对象更改为obj。这个家伙写了一个保留的内置符号。

3> 小智..:

我有一个类似的问题,我会尝试打电话reverse('admin_index'),并不断收到django.core.urlresolvers.NoReverseMatch错误.

结果我在urls.py文件中有旧的格式管理URL.

我在我的urlpatterns中有这个:

(r'^admin/(.*)', admin.site.root),

它使管理屏幕工作,但是不赞成这样做.我需要将其更改为:

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

一旦我这样做,Reversing Admin URL文档中承诺的所有善意就开始起作用了.


这个问题的最佳网址:http://docs.djangoproject.com/en/dev/ref/contrib/admin/#reversing-admin-urls
这个"答案"不正确它只是展示了如何正确地将管理应用程序添加到您的应用程序,这解决了作者所遇到的另一个问题.实际问题的真正答案如下 - 来自markmuetz

4> Anentropic..:

对于更高版本,还有另一种方法,例如在1.10中:

{% load admin_urls %}
Add user
Delete this user

在哪里或opts类似的东西mymodelinstance._metaMyModelClass._meta

一个问题是您无法直接在Django模板中访问下划线属性(例如{{ myinstance._meta }}),因此您必须opts将视图中的对象作为模板上下文传递.


文档网址已经改变了!请参阅:https://docs.djangoproject.com/en/1.9/ref/contrib/admin/#reversing-admin-urls

5> Alex Koshele..:

对于1.1之前的django,它很简单(对于默认的管理站点实例):

reverse('admin_%s_%s_change' % (app_label, model_name), args=(object_id,))


使用新的命名空间,它是admin:%s_%s_change

6> Antony Hatch..:

基本上与Mike Ramirez的答案相同,但在文体学上更简单,更接近django标准get_absolute_url方法:

def get_admin_url(self):
    return reverse('admin:%s_%s_change' % (self._meta.app_label, self._meta.model_name),
                   args=[self.id])

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有