反向Django管理网址

时间:2019-06-21 22:27:38

标签: python django django-templates

this answer所述,我们可以使用url标记来反转Django管理URL。但是,在此处显示的示例中,您需要在传递给url的字符串中使用应用程序名称和型号名称。有没有办法将那些作为参数传递呢?我想要做的是这样的:

{% url 'something here' app_name model_name object_id %}

我该为'something here'投入什么?

2 个答案:

答案 0 :(得分:1)

我建议使用django_extensions来使用其show_urls命令来查找网址名称。

简单地做

pip install django_extensions

然后将django_extensions添加到您的INSTALLED_APPS

#settings.py
INSTALLED_APPS = [
    #...
    'django_extensions',
]

然后您可以运行

python manage.py show_urls

您可以将其与grep一起使用,以过滤出所需的相关URL。 例如

python manage.py show_urls | grep password
/admin/auth/user/<id>/password/  django.contrib.auth.admin.user_change_password  admin:auth_user_password_change
/admin/password_change/  django.contrib.admin.sites.password_change      admin:password_change
/admin/password_change/done/     django.contrib.admin.sites.password_change_done admin:password_change_done

并说我们要在模板中使用django.contrib.auth.admin.user_change_password

我们可以做到:

{% url "admin:auth_user_password_change" user.pk %}

P.S。您的生产环境实际上并不需要django_extensions,因此您可能只想将其安装在本地以供开发使用。


资源:

django_extensions installation documentation django_extensions commands

答案 1 :(得分:0)

如果您要撤消管理url,则默认admin.sites.urls中包含一个urlpattern,如下所示:

urlpatterns = [
        path('', wrap(self.index), name='index'),
        path('login/', self.login, name='login'),
        path('logout/', wrap(self.logout), name='logout'),
        path('password_change/', wrap(self.password_change, cacheable=True), name='password_change'),
        path(
            'password_change/done/',
            wrap(self.password_change_done, cacheable=True),
            name='password_change_done',
        ),
        path('jsi18n/', wrap(self.i18n_javascript, cacheable=True), name='jsi18n'),
        path(
            'r/<int:content_type_id>/<path:object_id>/',
            wrap(contenttype_views.shortcut),
            name='view_on_site',
        ),
    ]

查看上面的代码,您可以简单地在{% url 'admin:index' %}的模板中使用reverse('admin:index'),其他地方用于管理控制台的网址。与所有其他管理员网址格式相同